43

元の admin login() と AuthenticationForm を再利用して、ログイン ページで「remember me」オプションがオンになっているユーザーの Cookie の長さを長くするにはどうすればよいですか? 現在、urls.py を介して組み込みのログインを使用しています。

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 に渡す方法がわかりません

現在、ユーザーが「remember me」ボックスをオフにしてログに記録すると、Cookie の有効期間が settings.py で定義されます。

SESSION_COOKIE_AGE = 360

同様の質問がいくつか見つかりましたが、別のアプリをインストールする必要はないと思います。以下のスニペット ( 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)
4

2 に答える 2

23

django セッション Cookie の経過時間は秒単位で定義されます。

SESSION_COOKIE_AGE = 360

は、セッションが 6 分後に期限切れになることを意味します。最近、「Remember Me」機能を実装し、次のように設定しました。

SESSION_COOKIE_AGE = 60 * 60 * 24 * 30 # One month

スニペットで示したように、ログイン ビューをオーバーライドする必要があります。

しかし、set_expiry(0) を使用している場合は発生しないはずの、ブラウザを閉じる (remember me がオフになっている) ときにユーザーが再ログインする必要がないという奇妙な問題が発生しているようです。set_expiry(0) を使用すると、django は固定長の Cookie ではなく「セッション」の長さの Cookie を設定し、設計上、ブラウザーを閉じた後に有効期限が切れます。

ブラウザを閉じるときに Cookie をクリアすることに影響する別の設定があります。SESSION_EXPIRE_AT_BROWSER_CLOSE 設定の値を変更してみるか、構成内の既存の値を確認してください。https://docs.djangoproject.com/en/2.2/topics/http/sessions/#browser-length-sessions-vs-persistent-sessions

于 2015-02-18T21:36:53.913 に答える