我在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%的时间)。
最初,我认为这是该用户浏览器的问题。我在尝试登录时开始记录用户代理,并要求该用户尝试使用多个浏览器;她有,并且所有人都能重现同样的问题。 我重置了她的密码,并能够使用新凭据登录帐户。她仍然无法登录。
她已经倾倒了她的缓存并清理了几次饼干。同样,使用反恶意软件的软件也不会返回任何结果(这可能是最可疑的)。
我错过了什么?为了解决这个问题,我是否需要在服务器端做一些事情,或者它可能是她的计算机本身的问题?
答案 0 :(得分:2)
问题已经解决,至少是暂时的。在对Devise问题跟踪器上的问题进行一些搜索之后,我发现这段代码(位于config/initializers/session_store.rb
中)似乎有所帮助:
Rails.application.config.session_store :cookie_store, key: "_rails_session_#{Rails.env}", domain: :all
此时用户登录时没有任何问题。我怀疑是用户没有正确清除她的cookie或者代码中的某个地方有混合。无论如何,它似乎是固定的。