0

我有一个基于 Rails 3 编写的旧应用程序。该应用程序有一个自制的身份验证系统,并广泛使用 cookie 来获取会话、用户 ID、角色等信息。尽管该应用程序是基于 Rails 3 构建的,但它不是 Rails 应用程序,并且已决定慢慢将其部分替换。

我们将把 nginx 放在新旧应用程序的前面,并使用 nginx 作为传递代理将不同的 url 路径路由到两个应用程序之一。

关键是不能在 Rails 3 应用程序上更改代码,因为它会使所有现有的 cookie 无效。

新的 Rails 5 应用程序将用于身份验证,其想法是创建一个 cookie,旧的 Rails 3 应用程序可以读取并用作单点登录解决方案。

对于 Rails 5 应用程序,我们将使用 Devise。Rails 5 具有加密的 cookie,Rails 3 使用签名的编码 cookie。有没有办法告诉 Rails 5 创建旧的 Rails 3 样式的 cookie?

Rails 3 应用程序中的代码无法更改,因为它会使所有现有 cookie 无效。

4

1 回答 1

1

如果您无法更改 rails3 应用程序,那么您必须告诉 Rails5 使用 rails 3 应用程序可以读取的 cookie。Rails 4.1 和更早的版本使用 'Marshal' 来序列化 cookie,但 Rails 5 默认使用 :json 来序列化。

如果您只是更新单个应用程序,那么解决方案是使用 :hypbrid 序列化,这会慢慢地将所有 cookie 迁移到新格式,但是,在您的情况下,这会破坏 Rails3 应用程序。所以尝试将 App/Config/Initializers 中的 cookie_serializer 设置为 :marshal

Rails.application.config.action_dispatch.cookies_serializer = :marshal

您还可以查看有关在 Rails 3 和 4 之间共享 cookie 的问题和答案:Sharing Cookies between rails 3 and 4

于 2016-05-12T16:07:52.170 回答