如何在登錄頁面選中「記住我」選項來重複使用原始admin login()和AuthenticationForm爲用戶設置更長的cookie長度?我目前使用內置的登錄通過urls.py使用內置登錄視圖和身份驗證表單的Django「Remember Me」
url(r'^login/$','django.contrib.auth.views.login', {'template_name': 'authentication/login.html'}, name='login'),
複選框在我的login.html實現爲:
<label><input name="remember_me" type="checkbox">Keep me logged in</label>
,但我不知道如何通過傳遞信息AuthenticationForm到django.contrib.auth.views.login
目前,如果用戶登錄「記住我」複選框選中,餅乾年齡在settings.py
SESSION_COOKIE_AGE = 360
01定義
我發現了幾個類似的問題,但我不認爲這應該需要安裝一個單獨的應用程序。以下代碼段(http://djangosnippets.org/snippets/1881/)似乎很有前途,但我只爲幾個月的編碼Python和Django和我是不是能夠得到它的工作:
def login(request, *args, **kwargs):
if request.method == 'POST':
if not request.POST.get('remember_me', None):
request.session.set_expiry(0)
return auth_views.login(request, *args, **kwargs)
該片段實際上是以另一種方式工作,但主要想法仍然是基於複選框選擇設置cookie過期。 – Sawwy 2013-02-26 22:26:38
這段代碼是正確的,只需將'SESSION_COOKIE_AGE'設置爲記住的登錄期滿,'request.session.set_expiry(0)'內的'0'設置爲一次性登錄失效。 – okm 2013-02-26 22:57:05
好吧,我現在以默認會話長度爲5秒的方式工作,記住我的會話時間爲30秒(僅用於測試目的)。但是,當我使用set_expiry(0)時,關閉瀏覽器時不會刪除會話(關閉整個瀏覽器而不是選項卡)。問題依然存在:1)刪除FROM django_session(刪除數據庫中的所有會話信息)2)清除所有瀏覽器歷史記錄(Chrome 25.0.1364.97)。我從頭開始,但一旦這是用戶登錄,它將保持登錄。有什麼我需要做的? – Sawwy 2013-02-27 09:49:29