我最近将我的应用程序从Django 1.11升级到Django 2.0。
我在尝试以谷歌浏览器的隐身模式登录时遇到问题,这是我第一次获得:Forbidden (403) CSRF verification failed. Request aborted.
。如果我重新发送登录帖子,我仍然会收到错误。但是,如果我再次进入登录页面,它会正常工作。
我认为这与饼干有关。我的中间件如下:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
]
我的登录视图:
from django.contrib.auth.views import LoginView as AuthLoginView
class LoginView(AuthLoginView):
template_name = 'transactions/login.html'
模板transactions/login.html
:
{% extends 'base.html' %}
{% load bootstrap_tags %}
{% block content %}
<div class="col-sm-6 col-md-4 well">
<form action="{% url 'login' %}" method="post" class="form">
{% csrf_token %}
{{ form|as_bootstrap }}
<button type="submit" class="btn btn-primary">Login</button>
</form>
</div>
{% endblock content %}
我假设一切都配置正确,因为这个问题只发生在这种情况下。
有人知道发生了什么吗?
当您从常规窗口登录时,您将获得当前用户的csrf_token,但当您切换到隐身模式时,您将成为匿名用户。因此,您的旧csrf_token不匹配,它会抛出403禁止错误。因此,它需要您注销并再次登录。