2011-12-02 32 views
4

我无法控制web2py中的登录后重定向行为。web2py中的登录后重定向

根据this,web2py根据登录是由系统启动(例如访问auth保护功能时)还是用户(点击“登录”链接时),以不同的方式处理登录后重定向。 。在前一种情况下,如预期的那样,行为是在登录后重定向到引用页面。然而,在后者中,用户在登录后重定向到索引页面,或者转到auth.settings.login_next中硬编码的页面。

我该如何进行设置,以便登录后重定向总是将您返回到引用页面,而不管登录是如何启动的?

回答

5

您可以更改您的“登录”链接,以便始终在查询字符串中包含当前网址作为_next变量的值。例如,无论你创建一个登录链接,其定义是这样的:

A('Login', _href=URL('default', 'user', args='login', 
    vars=dict(_next=URL(args=request.args, vars=request.vars)))) 

这将在登录链接的查询字符串当前页面(包括任何ARGS和VAR)的网址添加到_next变量,这将导致登录后重定向回当前页面。

如果您使用auth.navbar()帮助程序生成您的登录链接,那么已解决此问题的中继已经发生变化(将很快发布)。新的auth.navbar()将自动将_next变量添加到所有链接,因此,在单击任何导航栏链接后,用户将被重定向回原始页面。与此同时,您可以编辑auth.navbar()如下:

import urllib 
navbar = auth.navbar() 
if not auth.is_logged_in and request.args(0) != 'login': 
    navbar[1]['_href'] += '?_next=' +\ 
     urllib.quote(URL(args=request.args, vars=request.vars)) 
+1

@ Anthony-非常感谢,这个工程。是的,我绝对认为这应该是在任何情况下的默认行为。当前不一致的行为是混淆和无证的。 – Yarin

+0

如果我把它放在usersDatatabe的模型中,我得到以下错误AttributeError:'NoneType'对象没有属性'fields' – Yebach

+0

找到了解决方案。 auth.settings.logout_next正在工作,但我的网址不正确或不完整,所以我被重定向到默认/索引页面 – Yebach