我有一个在HTTP和HTTPS后面运行的博客,并且遇到了csrf令牌验证问题。
CSRF令牌在每个表单中都应该是可用的,但是当我在网站的HTTP版本上并尝试提交注释时,我会收到以下错误。
禁止(403) CSRF验证失败。请求中止。
参与者检查失败 - http://mysite.com/blog/1/与https://mysite.com/不匹配。
通过HTTPS查看博客时,它可以正常工作。
任何人都知道如何让验证与两者相匹配吗?
答案 0 :(得分:1)
您可能需要检查设置以查看是否将CSRF_COOKIE_SECURE参数设置为True
这会将cookie标记为安全,并阻止浏览器通过非安全连接(即HTTP)接受它。
要检查这是否是问题的根源,您可以使用任何有效的视图并插入断言False以获取调试屏幕并查看Csrf cookie是否已发送或是否。
答案 1 :(得分:1)
我明白了。这是我的fastcgi参数的一个问题
fastcgi_param HTTPS on;
设置需要启用HTTPS的环境变量。当这个变量打开时,Django会对csrf标记执行一些额外的强制执行。