我刚刚将django更新为1.4。但是当我尝试提交登录表单时出现以下错误:
禁止(403) CSRF验证失败。请求中止。 失败的原因: CSRF令牌丢失或不正确。
在我的settings.py(MIDDLEWARE_CLASSES)中,我不得不删除以下行,因为它现已弃用:
'django.middleware.csrf.CsrfResponseMiddleware',
而且我开始得到这个错误。
一些必要的信息: Urls.py
url(r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'registration/login.html'}, name='login')
MIDDLEWARE_CLASSES = (
'django.middleware.gzip.GZipMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
# 'django.middleware.csrf.CsrfResponseMiddleware',
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
)
的login.html
{% extends "base.html" %}
{% block title %} Login {% endblock %}
{% block content %}
<div id="text">
<table>
<form action="" method="post">
{% csrf_token %}
<tr>
<td><label for="username">Email:</label></td>
<td><input type="text" name="username" value="" id="username"></td>
</tr>
<tr>
<td><label for="password">Password:</label></td>
<td><input type="password" name="password" value="" id="password"></td>
</tr>
<tr>
<td><input type="submit" value="Login" />
{% if next %}
<input type="hidden" name="next" value="{{ next }}" /></td>
{% else %}
<input type="hidden" name="next" value="/" /></td>
{% endif %}
</tr>
</form>
</table>
{% if form.errors %}
<p class="error">User or password incorrect</p>
{% endif %}
</div>
{% endblock %}
有谁知道如何解决这个问题?
答案 0 :(得分:7)
代码看起来很好,Django 1.3和1.4 auth.views.login正确使用RequestContext。请检查:
答案 1 :(得分:3)
答案 2 :(得分:0)
我有类似的问题,我的应用程序部署在HTTPS上。我不得不将设置标志CSRF_COOKIE_HTTPONLY更改为false,以便客户端服务器可以访问csrf cookie。
答案 3 :(得分:0)
清除浏览器或Google Chrome cookie ,希望它能正常工作。