当我尝试使用登录页面时出现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")
答案 0 :(得分:1)
原因在文档here中已解决:
出于安全原因,每次用户登录时都会旋转CSRF令牌。任何在登录之前生成表单的页面将具有旧的无效CSRF令牌,需要重新加载。如果用户在登录后使用“后退”按钮,或者他们登录了其他浏览器选项卡,则可能会发生这种情况。
关于修复它,既没有直接的方法,也没有很好的理由。如果用户在这种不太可能的情况下遇到错误,他们要做的就是重新加载页面。所以如果我是你我就不会打扰。
答案 1 :(得分:1)
如果发生这样的情况,即用户打开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'