Python 为什么Django管理员登录给我403 CSRF错误?
我正在运行Django 1.2.2,尝试登录Django管理员时出现以下错误: 禁止(403)CSRF验证 失败。请求被中止 失败原因: 没有CSRF或会话cookie **我没有对barebones管理员进行定制,当我检查源代码时,在我认为正确的位置有一个CSRF令牌 当我查看正在发送的实际请求时,有一个csrf令牌正在发送,但Django仍然说csrf验证失败 谁能给我指出正确的方向吗?为什么会发生这种情况?1)您的Python 为什么Django管理员登录给我403 CSRF错误?,python,django,csrf,django-csrf,Python,Django,Csrf,Django Csrf,我正在运行Django 1.2.2,尝试登录Django管理员时出现以下错误: 禁止(403)CSRF验证 失败。请求被中止 失败原因: 没有CSRF或会话cookie **我没有对barebones管理员进行定制,当我检查源代码时,在我认为正确的位置有一个CSRF令牌 当我查看正在发送的实际请求时,有一个csrf令牌正在发送,但Django仍然说csrf验证失败 谁能给我指出正确的方向吗?为什么会发生这种情况?1)您的设置.中间件类中是否有'django.middleware.csrf.Csr
设置.中间件类中是否有'django.middleware.csrf.CsrfViewMiddleware'
2) 你确定你一直使用1.2.2吗?昨天晚上才出来的 根据,不仅需要csrf隐藏表单字段,还需要csrftoken
cookie。您提供的错误消息还表明缺少cookie
我会查看您浏览器的cookies,以确保csrftoken
cookie存在。我在Django 1.2.1 FINAL上也遇到过同样的问题。因为我知道我们生产站点上的Django永远不会从1.0更新(出于各种原因),所以我找到了一个解决方案,并将其应用到我的开发版本settings.py中,使production settings.py保持不变
使用以下代码在应用程序目录中创建middleware.py文件:
class disableCSRF:
def process_request(self, request):
setattr(request, '_dont_enforce_csrf_checks', True)
return None
然后在settings.py的开发版本中,将其插入到中间件类中:
'your_app_name.middleware.disableCSRF',
也许不是最安全的解决方案,但我们的Django站点是严格的内部站点,因此任何类型的恶意操作的风险都是最低的。这个解决方案很简单,不涉及对模板/视图的更改,而且它可以立即工作(与我尝试过的其他解决方案不同)
希望有人在类似的情况下,我会发现这是有用的
这要归功于约翰·麦科勒姆,我在他身上找到了这个。Django 1.2.2不是昨天发布的吗?是的,我修改了我的问题。我今天删除并重新安装了Django。但在做那件事之前,我发现了错误。我以前使用过1.2.1。是的,我的中间件类中有它。事实上,我想我一直在运行1.2.1,直到今天早上我完全重新安装它。很好。如果我检查Charles中的请求,我可以看到请求中有csrfmiddlewaretoken。因此,如果正在生成令牌,CSRF将起作用。但是为什么在提交表单时它看不到令牌呢?我最终发现我只是在Firefox中遇到了这个错误。为了纠正这个问题,我进入了我的firefox cookie,并删除了django站点的所有cookie。一旦浏览器为站点提供了一个新的csrf cookie,它就可以正常工作了。一定是一个过时的cookie或什么的…我有这个问题再次与同一个网站。我上面提到的解决方案这次不起作用。Django现在甚至没有生成CSRF cookie。你的意思是在这里说“project”而不是“app”吗?当我尝试此解决方案时,它只是在管理员登录时给我一个错误:“看起来你的浏览器没有配置为接受cookie。请启用cookie,重新加载此页面,然后重试。”我不得不使用此方法。出于某种原因,我工作的服务器正在清理cookies。我们认为这是由于空格,但它仍然抛出错误。谢谢你提供了这个很酷的解决方案!