一個簡單的django user.is_authenticated問題
阿新 • • 發佈:2017-11-28
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: returnFalse def gotologin(request): string = ‘登錄信息已過期,請重新登錄‘ return render_to_response(‘gotologin.html‘,{‘string‘:string})
下面處理請求的方法中,調一下VerifyLogin函數就可以驗證狀態
if request.session[‘userid‘]:
....
esle:
....
一個簡單的django user.is_authenticated問題