Django"记住我",内置登录视图和身份验证表单

Saw*_*wwy 37 django checkbox login remember-me

我怎样才能重新使用原来的管理员登录()和AuthenticationForm设置较长的Cookie有效期与"记住我"选项,在登录页面检查用户?我目前正在通过urls.py使用内置登录

url(r'^login/$','django.contrib.auth.views.login', {'template_name': 'authentication/login.html'}, name='login'),
Run Code Online (Sandbox Code Playgroud)

该复选框在我的login.html中实现为:

<label><input name="remember_me" type="checkbox">Keep me logged in</label>
Run Code Online (Sandbox Code Playgroud)

但我不知道如何通过AuthenticationForm传递信息给django.contrib.auth.views.login

目前,如果用户未选中"记住我"框,则会在settings.py中定义cookie年龄

SESSION_COOKIE_AGE = 360
Run Code Online (Sandbox Code Playgroud)

我发现了几个类似的问题,但我认为这不需要安装单独的应用程序.下面的代码片段(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)
Run Code Online (Sandbox Code Playgroud)

tar*_*ueh 18

django会话cookie年龄以为单位定义.

SESSION_COOKIE_AGE = 360
Run Code Online (Sandbox Code Playgroud)

表示会话将在6分钟后过期.我最近实现了"记住我"功能,并设置了以下内容:

SESSION_COOKIE_AGE = 60 * 60 * 24 * 30 # One month
Run Code Online (Sandbox Code Playgroud)

登录视图需要覆盖,因为您已在代码段中显示.

但听起来你有一个奇怪的问题,关闭浏览器(当记住我未选中时)不需要用户重新登录,如果你使用set_expiry(0)不应该发生.当你使用set_expiry(0)时,django设置一个'session'长度cookie而不是固定长度的cookie,并且按照设计它会在浏览器关闭后过期.

还有另一个设置会影响浏览器关闭时清除cookie.也许您可以尝试更改SESSION_EXPIRE_AT_BROWSER_CLOSE设置的值或检查配置中的现有值.https://docs.djangoproject.com/en/1.10/topics/http/sessions/#browser-length-sessions-vs-persistent-sessions