打开 Chrome 开发人员工具时出现 Django CSRF 令牌错误

Posted

技术标签:

【中文标题】打开 Chrome 开发人员工具时出现 Django CSRF 令牌错误【英文标题】:Django CSRF token error when Chrome developer tools is open 【发布时间】:2019-06-15 03:56:39 【问题描述】:

最近几天我在 Chrome 上遇到了一个非常奇怪的问题,我无法确定出了什么问题。本质上,当开发人员工具面板打开时, 提交表单时我会收到一致的 CSRF 错误。面板关闭时我没有收到错误消息。这使得调试某些事情几乎是不可能的。

据我所知,middlewareCSRF 令牌处理没有任何变化(我不是项目中唯一的开发人员,但我感觉检查了提交)。 Chrome 的版本是 71(12 月 4 日发布,早于这种情况开始发生),所以我怀疑它是特定于浏览器的。

我只是想知道是否有其他人经历过类似的事情?

Django 错误是:

Forbidden (403) CSRF verification failed.
Request aborted.
Reason given for failure: CSRF token missing or incorrect.

【问题讨论】:

尝试清理浏览器数据和缓存。 如果清理浏览器数据和缓存不起作用,您可以发布您的相关代码吗?可能是有点不对劲 清除浏览器数据和缓存并不能解决问题。我不确定哪个代码是相关的,但我们正在寻找新的身份验证程序(在 django 之外)是否导致问题的线索。 看起来它实际上是一个 python 包的最新升级,但还不确定是哪一个导致了问题。 Katharine,您是否能够识别/解决问题? 【参考方案1】:

无论是否打开开发者工具,手动删除 crsf cookie 后,我都遇到了 google chrome 的问题。

对我来说问题出在 settings.py 中:

CSRF_COOKIE_SECURE = True

这使得它在开发中失败,因为浏览器只会通过 https 连接接受 cookie。所以将 CRSF_COOKIE_SECURE 设置为 false(默认)解决了我的问题。

相关文档部分:Django Docs

【讨论】:

【参考方案2】:

我也有同样的问题。 我在我的代码中这样做来解决它:我在 Chrome 和 Firefox 中测试它

if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine'):
    SERVER_RUN = 'cloud'
    DEBUG = False
else:
    SERVER_RUN ='local'
    DEBUG = True
    
if SERVER_RUN !='local':
    SESSION_COOKIE_DOMAIN = '.mywebsite.com'
    CSRF_COOKIE_SECURE = True
    SESSION_COOKIE_SECURE = True
else:
    CSRF_COOKIE_SECURE = False
    SESSION_COOKIE_SECURE = False

【讨论】:

以上是关于打开 Chrome 开发人员工具时出现 Django CSRF 令牌错误的主要内容,如果未能解决你的问题,请参考以下文章

从 JavaScript 以编程方式打开 Safari / Google Chrome 开发人员工具

打开新标签页/新窗口时自动打开 Chrome 开发者工具

Vue js 开发代码运行良好,但生产版本在打开时出现空白白屏

调试 - Chrome调试

如何以编程方式禁用 chrome 开发人员工具中的 javascript?

在 https iframe 中注册服务人员时出现 DOMException