Rails 应用程序中的持续 CSRF 令牌拒绝

Persistent CSRF Token Rejection in Rails App

我在 Rails 4.2 应用程序中使用 Devise 进行身份验证。大多数用户在登录和完成工作时都没有遇到任何问题,但有一个用户似乎一直使用错误的 CSRF 令牌而无法登录。

当然,下面是记录的内容:

W, [2015-02-17T20:58:19.261194 #1936]  WARN -- : Can't verify CSRF token authenticity
I, [2015-02-17T20:58:19.263556 #1936]  INFO -- : Completed 422 Unprocessable Entity in 5ms
F, [2015-02-17T20:58:19.276795 #1936] FATAL -- :
ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):
<stack trace>

仔细阅读日志,我发现用户的 CSRF 令牌如您所料更改,但它始终(100% 的时间)被服务器拒绝。

最初,我认为这是该用户浏览器的问题。当尝试登录时,我开始记录用户代理,并要求该用户尝试使用多个浏览器;她有,而且所有人都能重现同样的问题。 我重置了她的密码,并能够使用新凭据登录该帐户。她仍然无法登录。

她已经多次转储缓存并清除 cookie。同样,使用反恶意软件 returns 的运行也没有结果(这可能是最可疑的)。

我错过了什么?我需要在服务器端做些什么来解决这个问题,还是她的计算机本身有问题?

问题已经解决,至少是暂时的。在 Devise 问题跟踪器上搜索了一些问题后,我偶然发现了这个似乎有帮助的片段(用于放置在 config/initializers/session_store.rb 中):

Rails.application.config.session_store :cookie_store, key: "_rails_session_#{Rails.env}", domain: :all

用户此时登录没有任何问题。我怀疑要么是用户没有正确清除她的 cookie,要么是代码中某处出现了混淆。无论如何,它似乎是固定的。