我的应用程序刚刚升级到 Rails 4,我们开始看到随机的 InvalidAuthenticityToken 错误。我做了一堆调查,但还没有找到解决方案。任何人都知道发生了什么以及如何解决它?
指出出现在其他类似 SO 问题中但不适用于我的事情:
我们protect_from_forgery with: :exception
在 ApplicationController 中调用,但我们也在 Rails 3 中这样做并且没有出现此错误。
我已确认这些是以标准方式使用网站的普通用户;这些不是 CSRF 尝试。
这些不是 API 调用,它们是标准的 Web 表单提交。
真实性令牌存在于表单(通过 Railsform_for
或form_tag
生成)和提交的请求中。
我的会话不应该设置过期时间,因为我没有设置过期时间,而且 Rails 默认是永久的,而且我的用户不经常登录或退出(所以过期的令牌不太可能,就像“打开一个选项卡,登录到单独的选项卡,返回打开标签并尝试操作”)。
生成与我的csrf_meta_tag
表单相同的令牌并删除它没有帮助。
我的用户确认他们至少在 Firefox、Chrome 和 Safari 上体验过这种情况。
所有代码都可以在 Github 上找到。
可能相关:如果我secret_key_base
在 secrets.yml 中更改我的开发并更改我的session_store.rb
文件以使用:
Rails.application.config.session_store :cookie_store, key: '_glowfic_constellation_' + Rails.env, domain: 'glowfic.com', tld_length: 2
并重新启动服务器,我将注销并且可以在尝试登录时 100% 可靠地遇到此错误。
编辑调出更多的东西:
我无法强制清除所有会话,因为我使用 cookie 存储,但是我已经在生产中重置了 secret_key_base 和 cookie 名称,这(很难说,但我认为)有帮助吗?但没有解决问题。
“可能相关”似乎无关,并且与不支持“localhost”的域“glowfic.com”相关;如果我改用域 localhost,我无法在本地复制。