我有一个Rails应用程序,我已经从3.0.7升级到3.2.6。我使用Dalli和memcached作为我的会话商店。
自我升级以来,我开始收到WARNING: Can't verify CSRF token authenticity
错误,我的会话正在重置。
我在标题中致电csrf_meta_tags
。
在我的ApplicationController中,我已覆盖verify_authenticity_token
以查看应用程序认为csrf_token是什么。
def verify_authenticity_token
verified_request?
Rails.logger.info "+++ VERIFY AUTH TOKEN +++"
Rails.logger.info session.inspect
end
我从我的应用程序提交了一个表单,写入记录器的会话数据是:
{"_csrf_token"=>"4OQ47F2py+l12lLSTnq0RTmyPbmPi2UGMZaPhMG6vVQ="}
这与元标记中页面上设置的值以及使用表单提交的值不同:
{"authenticity_token"=>"qMsdBkTHoBH09+X0tnyoPsbtc752yKjCVHddrcufd7g="}
事实证明这是由于配置错误造成的。
我一直在config / initializers / session_store.rb中设置session_store
配置:
require 'action_dispatch/middleware/session/dalli_store'
Rails.application.config.session_store :dalli_store
这是针对所有环境初始化的,但在开发环境中,缓存的默认配置为config.perform_caching = false
。
删除初始化程序文件并将会话存储配置移动到production.rb文件为我解决了这个问题。
config.session_store = :dalli_store, 'localhost:11211'
我只是不确定为什么这不是3.0.2中的问题,而是在3.2.6中。