2012-04-07 83 views
11

我刚把django更新为1.4。但我在尝试提交我的登录表单时出现以下错误:Django - CSRF令牌丢失或不正确

禁止(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 %} 

有谁知道如何解决这个问题呢?

回答

7

代码看起来很好,Django 1.3和1.4 auth.views.login正确使用RequestContext。请检查:

  • 首先要清除浏览器的数据,然后再试一次
  • 什么的价值提出csrfmiddlewaretoken
  • 你正确导入Django的?
  • 只要确定在控制台中是否有UserWarning??“在模板中使用了{%csrf_token%},但上下文没有提供该值,这通常是由于未使用RequestContext引起的。
+2

清除浏览器的数据解决了我的问题。 – chaim 2013-05-29 15:32:34

3
  1. 为1.3和1.4, “django.middleware.csrf.CsrfResponseMiddleware” 应为 “django.middleware.csrf.CsrfViewMiddleware”
  2. 另外,我清理谷歌Chrome浏览器的cookies使工作。
0

我有类似的问题,我的应用程序部署在HTTPS上。我必须将设置标志CSRF_COOKIE_HTTPONLY更改为false,以便客户端服务器可以访问csrf cookie。

相关问题