添加注销功能时,Django身份验证停止工作

时间:2016-06-17 07:51:24

标签: django authentication

我制作了这个简单的Django网站,它只是记录用户:

def main(request):
    # User is already logged in and redirected to main
    if request.user.is_authenticated():
        return render(request, 'mysite/main.html')

    # User is attempting to log in
    elif 'username' in request.POST:
        return login(request)

    # Return login page
    return render(request, 'mysite/login.html')

def login(request):
    username = request.POST.get('username')
    password = request.POST.get('password')

    logged_in = authenticate(username=username, password=password)

    if logged_in is not None:
        return render(request, 'mysite/main.html')
    else:
        return render(request, 'mysite/login.html')

所有这些都没有任何问题。我可以刷新页面,但我仍然登录,并且' {{request.user.username}}'在main.html按预期工作。然后我添加了一种注销方式。它只是main.html中的一个链接,指向logout /,它指向此视图:

def log_out(request):
    print "logging out"
    logout(request)
    return HttpResponseRedirect('/')

我第一次注销后,身份验证停止正常工作。如果我输入正确的用户名和密码,我仍然可以登录,但是{{request.user.username}}'不再输出任何内容,如果我在main.html刷新页面,我现在最终登录login.html。

为什么会这样?为什么我的身份验证被我注销了一次?

1 个答案:

答案 0 :(得分:0)

注销的添加不应该归咎于此。您在登录过程中缺少重要的一步:您不要拨打auth.login()

authenticate()仅返回经过身份验证的用户;您仍需要将该用户登录。