将Rails会话存储区从cookie切换到缓存:InvalidAuthenticityToken

时间:2018-10-11 17:00:57

标签: ruby-on-rails

我继承了使用基于cookie的会话存储的Rails站点的管理。由于Cookie太大(“ Cookie长度应小于或等于4096个字符。”),我一直收到错误消息,因此我试图切换到基于缓存的会话存储。 (另外:这主要是由于Microsoft Graph的访问令牌为1,798个字符。结果cookie为3,000多个字符。这看起来正确吗?即使cookie仅为1,798 ish,我想我也想要将其存储在服务器上,对吗?)

我所阅读的所有内容都表明此切换应该很容易:将会话存储设置从:cookie_store更改为:cache_store。这是新的session_store.rb

Rails.application.config.session_store :cookie_store, key: '_site_session'
Rails.application.config.session_store :cookie_store, key: '_access_token'
Rails.application.config.session_store :cookie_store, key: '_workbook_id'

完成此操作后,我现在在浏览器中看到“ _workbook_id” cookie的大小减小到44,因此看起来不错。但是,我现在无法登录该站点。这样做时,我得到错误:ActionController::InvalidAuthenticityToken at /login。我已经跟踪了身份验证过程,并验证了问题(我认为)是Rails在valid_authenticity_token中使用不匹配的令牌运行request_forgery_protection.rb。我不确定为什么会这样,或者下一步要去哪里。我承认我是Rails的新手,正在修补我不了解的东西。

注意:发出登录请求时,我还会看到很多异常:

Exception raised: [LoadError]: cannot load such file -- devise/sessions_helper.rb
Exception raised: [LoadError]: cannot load such file -- devise/sessions_helper.rb
Exception raised: [LoadError]: No such file to load -- devise/sessions_helper.rb
Exception raised: [AbstractController::Helpers::MissingHelperError]: Missing helper file helpers/devise/sessions_helper.rb
Exception raised: [LoadError]: cannot load such file -- users/sessions_helper.rb
Exception raised: [LoadError]: cannot load such file -- users/sessions_helper.rb
Exception raised: [LoadError]: No such file to load -- users/sessions_helper.rb
Exception raised: [AbstractController::Helpers::MissingHelperError]: Missing helper file helpers/users/sessions_helper.rb
Exception raised: [NameError]: uninitialized constant Session
Exception raised: [ArgumentError]: no receiver is available
Exception raised: [ArgumentError]: no receiver is available
Exception raised: [NameError]: uninitialized constant Users::Session
Exception raised: [NameError]: uninitialized constant Session
Exception raised: [NameError]: uninitialized constant Session
Exception raised: [ArgumentError]: no receiver is available
Exception raised: [ArgumentError]: no receiver is available
Exception raised: [NameError]: uninitialized constant Users::Session
Exception raised: [NameError]: uninitialized constant Session

尽管这些同时显示在cookie存储和缓存存储中,所以我不认为是问题所在。

1 个答案:

答案 0 :(得分:1)

可能过期了。尝试更新session_store.rb文件

# config/init../session_store.rb
Rails.application.config.session_store :cookie_store,
    :key => '_localhost_session', 
    :compress => true,
    :pool_size => 10,
    :expire_after => 1.year