Django - CSRF token 丢失或不正确

标签 django django-authentication django-csrf

我刚刚将 django 更新到 1.4。但当我尝试提交登录表单时,出现以下错误:

Forbidden (403) CSRF verification failed. Request aborted. Reason given for failure: CSRF token missing or incorrect.

在我的 settings.py (MIDDLEWARE_CLASSES) 中,我必须删除以下行,因为它现已弃用:

'django.middleware.csrf.CsrfResponseMiddleware',

然后我开始收到此错误。

一些必要的信息: 网址.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',
)

登录.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 %}

有人知道如何解决这个问题吗?

最佳答案

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

  • 先清除浏览器数据再试
  • 提交的csrfmiddlewaretoken的值(value)是多少
  • 您导入了正确的 Django 吗?
  • 只需确保控制台中是否有 UserWarning,如:“模板中使用了 {% csrf_token %},但上下文未提供该值。这通常是由于未使用 RequestContext 引起的。”

关于Django - CSRF token 丢失或不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10050991/

相关文章:

django - CSRF验证失败。请求已中止

django - 让 Django、VUE、CORS 和 CSRF 与真实世界的例子一起工作

javascript - Django - csrf token 未定义

django - python_ldap |在变量中提供证书内容

iphone - 我如何从 iPhone 应用程序向 Django 后端进行身份验证并向其发出请求以绕过 CSRF?

mysql - 在 Django 中加载固定装置时出现内容类型问题

Django Rosetta - 通过用户许可而不是 "translators"组进行翻译

django - 如何从 Django 中的编辑表单更新对象?

django - 如何正确扩展 django 用户模型

Django - 自定义身份验证后端中的错误消息