当我尝试将Rails版本从4升级到5时,在缓存存储设置方面遇到了一些困难

环境

Rails 5.1 版本

发生了什么?

升级至Rails 5系列后,发现在进行POST请求时出现错误导致应用崩溃。

Can't verify CSRF token authenticity.
request_forgery_protection.rb:195 handle_unverified_request : ActionController::InvalidAuthenticityToken

原因(只需一种选择)

总之,这与此有关。

由于未正确配置会话存储,导致无法正确从memcached服务器获取会话信息,进而导致CSRF令牌的认证失败。

应对

我按照这个进行了处理。

添加 cache_store 的配置

config.cache_store = :dalli_store, ['memcache_server_1', 'memcache_server_2']

修改config/initializers/session_store.rb

Rails.application.config.session_store(
  ActionDispatch::Session::CacheStore,
  :key => 'session_key',
  :expire_after => 1.days
)  

顺便提一下

更新指南中并没有找到明确的描述,但似乎从Rails 5.1开始,config/initializers/session_store.rb文件默认不再创建。不过,文件中的设置仍然有效,所以在本次处理中,我仍然建议将选项设置等内容继续写在config/initializers/session_store.rb文件中。

bannerAds