当我尝试使用登录页面时,我收到Forbidden (CSRF token missing or incorrect.)
错误。
方案如下:
Forbidden (CSRF token missing or incorrect.)
错误。csrf_token
的形式。为什么会这样?我该如何解决?
我不知道这会有所帮助,但这是我的views.py
登录
class Login_View(LoginView):
template_name = 'login.html'
def post(self, request, *args, **kwargs):
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
response_data = {}
if user is not None:
if user.is_active:
login(request, user)
response_data['result'] = 'success'
else:
return HttpResponse("Inactive user.")
else:
response_data['result'] = 'fail'
return HttpResponse(json.dumps(response_data), content_type="application/json")
原因在文档here中解决:
出于安全原因,每次用户登录时都会轮换CSRF令牌。在登录前生成表单的任何页面都将具有旧的无效CSRF令牌,需要重新加载。如果用户在登录后使用后退按钮或者他们登录其他浏览器选项卡,则可能会发生这种情况。
至于修复它,既没有直接的方式,也没有很好的理由。如果用户在这种不太可能的情况下遇到错误,他们所要做的就是重新加载页面。如果我是你,我不会打扰。
如果出现这样的场景,用户打开2个标签并尝试登录,这不是现实生活场景,仍然如果你想要你可以这样做,请记住用户喜欢这样玩
def post(self, request, *args, **kwargs):
username = request.POST['username']
password = request.POST['password']
if request.user.is_authenticated():
return redirect('to_some_page')
else:
user = authenticate(username=username, password=password)
response_data = {}
if user is not None:
if user.is_active:
login(request, user)
response_data['result'] = 'success'
else:
return HttpResponse("Inactive user.")
else:
response_data['result'] = 'fail'