gpt4 book ai didi

ruby-on-rails - 在两个 Rails4 应用程序之间共享 session

转载 作者:太空宇宙 更新时间:2023-11-03 17:10:12 25 4
gpt4 key购买 nike

我正在使用 devise 创建一个应用程序。有两个域名 1) www.test.com 和 2) www.hello.com 两个域都指向同一个应用程序。所以我想在两个应用程序之间共享 session (current_user)。用户将登录 (1),它应该访问域 (2)。

请建议最好的方法是什么。

最佳答案

这里的基本问题是 cookie 的工作方式( session 当然依赖于它)。 cookie 具有域属性,浏览器只发送域与请求主机匹配的 cookie(域开头的句点的含义有点微妙)

此外,当设置 cookie 时,浏览器将只接受作为当前域的父域且不是公共(public)域的域。例如,如果您收到来自 www.example.com 的响应,它可以为 www.example.comexample.com 设置 cookie,但不是 .com(浏览器有一个 list 的域名不应该被允许)。

所有这一切都表明,如果您的两个应用程序不共享一个共同的父应用程序(如您的情况),那么您将无法共享 cookie,因此您无法共享 Rails session 。

有很多方法可以解决这个问题,一个简单的方法是CAS。 (中央认证服务)协议(protocol)。基本流程是

  1. 用户访问 hello.com 并尝试访问某些 protected 资源(例如/home
  2. 用户被重定向到 sso.example.com/service?=http://hello.com/home
  3. 用户的身份在这里像往常一样被验证:用户要么登录,要么从 cookie 中识别等。
  4. sso 服务生成一个票证(一个任意 token )并将用户重定向到`http://hello.com/home?ticket=ABC123
  5. hello.com 上的应用程序向 SSO 服务器发出(服务器端)请求,传递票证
  6. SSO 服务器响应表明票证是否有效。如果票证有效,它还将包含一些有关用户的信息(例如电子邮件)
  7. hello.com 设置 session cookie,以便后续请求可以跳过步骤 2-6

有 cas 的 ruby​​ 实现(例如 rubycas,它同时具有 cas 客户端和服务器)和设计 strategies使用 CAS 的。当然还有其他方法可以做到这一点,例如使用誓言,但 CAS 稍微简单一些。

关于ruby-on-rails - 在两个 Rails4 应用程序之间共享 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29314817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com