我运行的Django 1.2.2,我得到以下错误,当我尝试登录到Django管理:为什么Django管理员登录会给我403 CSRF错误?
禁止(403)CSRF验证 失败。请求中止。
给出失败的原因:
没有CSRF或会话cookie。
**我没有定制到准系统管理员,当我检查源代码时,我认为是正确的地方有一个CSRF令牌。
当我查看发送的实际请求时,发送了一个csrf令牌,但Django仍然说CSRF验证失败。
任何人都可以点我在正确的方向?这是为什么发生?
我运行的Django 1.2.2,我得到以下错误,当我尝试登录到Django管理:为什么Django管理员登录会给我403 CSRF错误?
禁止(403)CSRF验证 失败。请求中止。
给出失败的原因:
没有CSRF或会话cookie。
**我没有定制到准系统管理员,当我检查源代码时,我认为是正确的地方有一个CSRF令牌。
当我查看发送的实际请求时,发送了一个csrf令牌,但Django仍然说CSRF验证失败。
任何人都可以点我在正确的方向?这是为什么发生?
1)您有'django.middleware.csrf.CsrfViewMiddleware'
在您的settings.MIDDLEWARE_CLASSES
?
2)你确定你一直在1.2.2?只有昨晚才出来...
根据docs,不仅需要csrf隐藏表单字段,而且还需要csrftoken
cookie。您提供的错误消息也表明缺少cookie。
我会查看您的浏览器Cookie以确保存在csrftoken
cookie。
我在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,他的site我找到了。
昨天没有Django 1.2.2出来吗? – 2010-09-09 15:59:45
是的,我修改了我的问题。我今天删除并重新安装了Django。尽管如此,我还是得到了错误。我以前使用1.2.1。 – thomallen 2010-09-09 17:45:12