我正在运行 Django 1.2.2,当我尝试登录 Django 管理员时收到以下错误:
禁止 (403) CSRF 验证失败。请求中止。
失败原因:
没有 CSRF 或会话 cookie。
** 我没有对准系统管理员进行任何自定义,当我检查源代码时,我认为正确位置的表单中有一个 CSRF 令牌。
当我查看正在发送的实际请求时,会发送一个 csrf 令牌,但 Django 仍然说 CSRF 验证失败。
谁能指出我正确的方向?为什么会这样?
我正在运行 Django 1.2.2,当我尝试登录 Django 管理员时收到以下错误:
禁止 (403) CSRF 验证失败。请求中止。
失败原因:
没有 CSRF 或会话 cookie。
** 我没有对准系统管理员进行任何自定义,当我检查源代码时,我认为正确位置的表单中有一个 CSRF 令牌。
当我查看正在发送的实际请求时,会发送一个 csrf 令牌,但 Django 仍然说 CSRF 验证失败。
谁能指出我正确的方向?为什么会这样?
我在 Django 1.2.1 FINAL 上遇到了同样的问题。因为我知道我们生产站点上的 Django 永远不会从 1.0 更新(由于各种原因),我找到了一个解决方法,我在我的开发版本 settings.py 中实现了它,而生产 settings.py 保持不变。
使用以下代码在您的应用程序目录中创建一个middleware.py文件:
class disableCSRF:
def process_request(self, request):
setattr(request, '_dont_enforce_csrf_checks', True)
return None
然后在您的 settings.py 开发版本中,将其插入 MIDDLEWARE_CLASSES:
'your_app_name.middleware.disableCSRF',
也许不是最安全的解决方案,但我们的 Django 站点是严格内部的,因此任何类型的恶意行为的风险都最低。该解决方案很简单,不涉及对模板/视图的更改,并且可以立即工作(与我尝试过的其他解决方案不同)。
希望与我有类似情况的人会发现这很有用。
归功于 John McCollum,我在他的网站上找到了这个。
1)你有'django.middleware.csrf.CsrfViewMiddleware'吗settings.MIDDLEWARE_CLASSES?
2) 你确定你一直在 1.2.2 上吗?昨晚才出来的。。。
根据文档,您不仅需要 csrf 隐藏表单字段,还需要csrftokencookie。您提供的错误消息还表明缺少 cookie。
我会查看您浏览器的 cookie 以确保csrftokencookie 存在。