【问题标题】:Switching Rails session store from cookie to cache: InvalidAuthenticityToken将 Rails 会话存储从 cookie 切换到缓存:InvalidAuthenticityToken
【发布时间】:2018-10-12 01:05:37
【问题描述】:

我继承了使用基于 cookie 的会话存储的 rails 站点的管理。我一直收到错误,因为 cookie 太大(“cookie 长度应小于或等于 4096 个字符。”),因此我试图切换到基于缓存的会话存储。 (旁白:这主要是由于 Microsoft Graph 的访问令牌是 1,798 个字符。生成的 cookie 是 3,000 个字符。这看起来对吗?即使 cookie 只有 1,798 个字符,我想我想要将其存储在服务器上,对吗?)

我一直在阅读的所有内容都表明,此切换应该很简单:将会话存储设置从 :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 在 request_forgery_protection.rb 中运行 valid_authenticity_token 并使用不匹配的令牌。我不知道为什么,或者下一步去哪里。我承认我是一个 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 存储和缓存存储中,所以我不认为这就是问题所在。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案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
    

    【讨论】:

    • 太棒了。谢谢! compress 将 cookie 大小降至 410。我找不到有关这些额外选项的文档。你知道我可以去哪里看吗?
    • @Trygve 不知何故也找不到,如果 dnt 想压缩,只需将其设置为 false 或将其删除。
    • 对我来说,压缩是这项工作的原因,因为它大大减少了 cookie 的大小。我对pool_size更好奇:那有什么作用?为什么我会想要compress?真的很好奇:如果它有效,它就有效!
    • 看起来这是我们最好的。它仍然没有提到 cookie_store 或 pool_size,并说 compress 默认为 true,这不是我所看到的。莫名其妙。感谢您的关注!
    猜你喜欢
    • 2013-05-07
    • 2020-12-26
    • 2018-10-06
    • 2010-10-07
    • 2012-08-10
    • 2014-07-31
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    相关资源
    最近更新 更多