我制作了这个简单的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。
为什么会这样?为什么我的身份验证被我注销了一次?
答案 0 :(得分:0)
注销的添加不应该归咎于此。您在登录过程中缺少重要的一步:您不要拨打auth.login()
。
authenticate()
仅返回经过身份验证的用户;您仍需要将该用户登录。