首页 > 解决方案 > Rails 4.2:如何禁用 cookie 加密

问题描述

我最近将我的 rails 3.2 应用程序升级到 rails 4.2。我面临新 Rails 4.2 设置的 cookie 已签名和加密的问题,我不会这样做,因为我的应用程序与其他 rails 3 应用程序交互。我想在 4.2 中重新引入创建 cookie 的旧方法。

标签: ruby-on-railssessioncookiesruby-on-rails-4.2rails-4-upgrade

解决方案


Rails 4 CookieStore默认加密 cookie 确实如此:

如果您设置了 secret_key_base,您的 cookie 将被加密。这比签名的 cookie 更进一步,因为加密的 cookie 不能被用户更改或读取。这是从 Rails 4 开始的默认设置。

似乎无法通过配置选项将其关闭,因此一种方法是不设置secret_key_base

另一种是使用重新定义的CookieStore#cookie_jar方法定义您的自定义会话存储:

class ActionDispatch::Session::MyCustomStore < ActionDispatch::Session::CookieStore
  private

  def cookie_jar(request)
    request.cookie_jar.signed
  end
end

并在config.rb

config.session_store :my_custom_store

这样,您的 cookie 将像在 Rails 3 中一样保存在签名的jar 中。


推荐阅读