1. 程式人生 > >一個簡單的django user.is_authenticated問題

一個簡單的django user.is_authenticated問題

backend user 每次 處理請求 已過期 保存 ret 登錄 bsp

Q1:這是我一個view函數:

def user_info(request):
    response=HttpResponse()
    user=request.user
    user_id=user.id
    if user.is_authenticated():
        is_login=1
    else:
        is_login=0
    response.write({"is_login":%s} % str(is_login))
    return response

雖然用戶已經登陸,但是返回的is_login總是0,也就是沒有登陸,這麽簡單的一個函數,為什麽會出錯?

A1:

如果你使用is_authenticated()判斷用戶是否登錄,那麽意味著你采用了django的auth系統,
那麽你的登陸最好使用django.contrib.auth中的login方法,
該方法會為將user_id以及user_backend放入session中存儲,
.is_authenticated()通過判斷session中是否有user_id 以及user_backend 來判斷用戶是否登陸。
如果,采用自己的登陸方法,那麽有可能沒將user_id 或者user_backend 放入session中保存。
所以你的user被django認為沒有登錄,雖然你已經登陸了。
最好的辦法是利用django自己的登陸方法,結合該方法,判斷用戶是否登陸,從而決定用戶的行為。

A2:

如果你要用is_authenticated()來判斷用戶是否登錄,那麽登錄你也得用django.contrib.auth來處理登錄、登出和權限驗證,你可以再看看admin那一章

我自己寫的話,我一般在session中加標示,後面的請求每次過來都驗證一下session,即可判斷登錄狀態,session也比較好控制過期時長。

def VerifyLogin(request):
    try:
        if request.session[userid]:
            return True
    except:
        return
False def gotologin(request): string = 登錄信息已過期,請重新登錄 return render_to_response(gotologin.html,{string:string})

下面處理請求的方法中,調一下VerifyLogin函數就可以驗證狀態

if request.session[‘userid‘]:

....

esle:

....

一個簡單的django user.is_authenticated問題