在django auth中重新加载页面时会话到期

时间:2012-09-16 10:15:35

标签: django django-authentication

每当我重新加载页面时,点击浏览器的地址栏网址或在另一个标签页中打开相同的网址,该会话似乎已过期。我的意思是我的页面正在导航到登录页面。

这是我的看法。下面的视图将在一个HTML页面中呈现,该页面是index.html。每当用户登录的用户名/密码登录表单以其他方式显示时,它表示感谢您登录。所以这个功能运行正常。

def index(request):
     if request.user.is_authenticated():
            return HttpResponseRedirect('/myapp/')

     if request.method == 'POST':
            form = UserLoginForm(request.POST)
            if form.is_valid():
                username = form.cleaned_data['username']
                password = form.cleaned_data['password']
            if request.user.is_authenticated():
                return HttpResponseRedirect('/myapp/')
            else:
                user = authenticate(username = username, password = password)
            return shortcuts.render_to_response('index.html',locals(),
                                    context_instance = context.RequestContext(request))
     else:
            form = UserLoginForm

return shortcuts.render_to_response('index.html',locals(),
                                    context_instance = context.RequestContext(request))

供我参考,我已在我的应用程序中安装了以下中间件类。

MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',

有人可以帮我这个吗

-RAM

2 个答案:

答案 0 :(得分:1)

那是因为你使用'authenticate'方法而不是'login'方法。你要做的就是使用'login'而不是'authenticate'来完成。当你使用'login'时,它会节省会话中的用户ID。请参阅此https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.login

答案 1 :(得分:1)

添加对login函数的调用,因为此函数负责在会话中保存用户的ID,如下所示:

else:
    user = authenticate(username = username, password = password)
    if user is not None:
        login(request, user)
    else:
        ...