2011-12-02 68 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