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