0

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

4

1 回答 1

1

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 中。

于 2018-05-02T12:28:25.810 回答