1

我有一个从 3.0.7 升级到 3.2.6 的 Rails 应用程序。我将 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="}


问题解决了

事实证明这是由于配置错误。

我一直session_store在 config/initializers/session_store.rb 中设置配置:

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 中。

4

0 回答 0