【问题标题】:sharing cookies between rails 3 and rails 4.1在 rails 3 和 rails 4.1 之间共享 cookie
【发布时间】:2014-08-28 06:50:14
【问题描述】:

我正在尝试在 Rails 3 和 Rails 4.1 应用程序之间共享 cookie。问题是 Rails 3 cookie 只是 base64 编码,但 Rails 4.1 cookie 是加密的。

有什么方法可以让 Rails 3 和 Rails 4.1 都使用兼容的 cookie?

目前最简单的方法似乎是降级到 Rails 4.0

【问题讨论】:

  • 我相信 Rails 4 cookie 机制没有向后移植到 Rails 3。为什么不升级?

标签: ruby-on-rails ruby-on-rails-3 cookies ruby-on-rails-4 base64


【解决方案1】:

要使此工作未设置secret_key_base,而是使用您在Rails 3 应用程序中使用的相同secret_token。然后诀窍是也设置action_dispatch.cookies_serializer = :marshal。否则 Rails 4 以 Rails 3 无法读取的格式存储 cookie。

所以我最终的 config/initializers/session_store.rb 有

Rails.application.config.action_dispatch.cookies_serializer = :marshal
Rails.application.config.secret_token = 'verylongstring'

【讨论】:

    【解决方案2】:

    您是否尝试过取消设置 secret_key_base 并将 secret_token 设置为您在 Rails 3 应用程序中使用的相同值?这可能不起作用,但我在 4.1 升级指南中没有看到任何暗示它不会起作用的内容。

    如果这不起作用,我能想到的选项:

    1. 切换到不同的会话存储(Memcached、ActiveRecord 等)。不理想,因为这意味着更多的基础设施,但它应该可以工作。
    2. 编写您自己的 cookie 中间件。如果您确实需要在多个应用程序之间共享 cookie 信息,这是您最好的长期解决方案。不要依赖于预先构建的 Rails 东西,因为(如您所见)很难保持同步。编写您自己的 Rack 中间件,该中间件可移植且完全符合您的需要。

    【讨论】:

    • 我尝试使用相同的 secret_key_base 和 secret_token,但没有成功。正如您所提到的,我们最终拥有自己的 cookie 中间件。
    猜你喜欢
    • 1970-01-01
    • 2012-05-11
    • 2011-06-27
    • 2015-08-14
    • 2012-03-27
    • 2016-12-11
    • 2012-09-27
    • 2012-05-09
    • 1970-01-01
    相关资源
    最近更新 更多