Ajax Django-登录-禁止(CSRF令牌丢失或不正确):
我在尝试使用登录页面时遇到Ajax Django-登录-禁止(CSRF令牌丢失或不正确):,ajax,django,csrf,csrf-protection,django-csrf,Ajax,Django,Csrf,Csrf Protection,Django Csrf,我在尝试使用登录页面时遇到禁止(CSRF令牌丢失或不正确)。错误 情况如下: 用户有两个打开的选项卡 两个选项卡都是登录页面 在选项卡1中,用户成功登录,并被重定向到需要登录的新页面 在选项卡2中,用户尚未刷新页面,仍在登录页面中。在Django后端,用户已经过身份验证,但前端模板还没有注意到 在选项卡2中,当我点击登录按钮时,我得到了禁止(CSRF令牌丢失或不正确)。错误 我确保csrf\u令牌在表单中 只有在使用两个选项卡时才会发生此错误 我正在使用AJAX 为什么会这样?我怎样才能修好它
禁止(CSRF令牌丢失或不正确)。
错误
情况如下:
禁止(CSRF令牌丢失或不正确)。
错误csrf\u令牌
在表单中李>
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")
文件中说明了原因: 出于安全原因,每次用户登录时都会轮换CSRF令牌。任何在登录之前生成表单的页面都会有一个旧的、无效的CSRF令牌,需要重新加载。如果用户在登录后使用“后退”按钮或登录到其他浏览器选项卡,则可能会发生这种情况
至于修复它,既没有直接的方法,也没有很好的理由。如果用户在这种不太可能的情况下遇到错误,他们所要做的就是重新加载页面。因此,如果我是你,我就不会麻烦了。文档中说明了原因: 出于安全原因,每次用户登录时都会轮换CSRF令牌。任何在登录之前生成表单的页面都会有一个旧的、无效的CSRF令牌,需要重新加载。如果用户在登录后使用“后退”按钮或登录到其他浏览器选项卡,则可能会发生这种情况
至于修复它,既没有直接的方法,也没有很好的理由。如果用户在这种不太可能的情况下遇到错误,他们所要做的就是重新加载页面。因此,如果我是你,我就不会麻烦了。如果出现这样的场景,用户打开两个选项卡并尝试登录,这不是真实的场景,但如果您愿意,您仍然可以这样做,请记住用户喜欢这样玩
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'
如果出现这样的场景,用户打开两个选项卡并尝试登录,这不是真实的场景,但如果您愿意,您仍然可以这样做,请记住用户喜欢这样玩
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'
可能的重复可能的重复