Ruby on rails Rails 3.2.6会话[:_csrf_token]与元标记不同

Ruby on rails Rails 3.2.6会话[:_csrf_token]与元标记不同,ruby-on-rails,memcached,csrf,dalli,Ruby On Rails,Memcached,Csrf,Dalli,我有一个Rails应用程序,已经从3.0.7升级到3.2.6。我使用Dalli和memcached作为会话存储 自从升级后,我开始收到警告:无法验证CSRF令牌真实性错误,我的会话正在重置 我在标题中调用csrf\u meta\u标记 在我的ApplicationController中,我覆盖了验证真实性\u令牌,以检查应用程序认为csrf\u令牌是什么 def verify_authenticity_token verified_request? Rails.logger.info "

我有一个Rails应用程序,已经从3.0.7升级到3.2.6。我使用Dalli和memcached作为会话存储

自从升级后,我开始收到
警告:无法验证CSRF令牌真实性
错误,我的会话正在重置

我在标题中调用
csrf\u meta\u标记

在我的ApplicationController中,我覆盖了
验证真实性\u令牌
,以检查应用程序认为csrf\u令牌是什么

def verify_authenticity_token
  verified_request?
  Rails.logger.info "+++ VERIFY AUTH TOKEN +++"
  Rails.logger.info session.inspect
end
我从我的应用程序提交了一份表单,写入记录器的会话数据是:
{“\u csrf\u token”=>“4OQ47F2py+L12LLSTNQ0RTMYPBMPI2UGMZAPHMG6VVVQ=“}

这与meta标记中页面上设置的值以及表单中提交的值不同:
{“真实性令牌”=>“qMsdBkTHoBH09+X0tnyoPsbtc752yKjCVHddrcufd7g=“”}


问题解决 原来这是由于配置错误造成的

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

require 'action_dispatch/middleware/session/dalli_store'
Rails.application.config.session_store :dalli_store
这是为所有环境初始化的,但是在开发环境中,缓存的默认配置是
config.perform\u caching=false

删除初始值设定项文件并将会话存储配置移动到production.rb文件,为我解决了这个问题

config.session_store = :dalli_store, 'localhost:11211'

我只是不知道为什么这在3.0.2中不是问题,但在3.2.6中是问题。

你看到了吗:@gabrielhilal,我看到了,但谢谢你的推荐。我的表单不是通过AJAX提交的。@whtt eric,很高兴你找到了答案!但是,你不应该把你的答案写进问题中,而应该把“问题解决”后的部分作为你问题的答案。然后,当你被允许的时候,你可以接受你自己的答案。这让每个人都知道这个答案已经解决了,而不必读到问题的结尾。