如何在支持多个域的 Rails 应用程序中维护会话?
How do I maintain session in Rails app with support for multiple domains?
场景如下:
我在一台机器上有一个 Rails 应用程序 运行。本次讨论的应用程序是一个内容管理系统,将用于为网络中的多个站点提供服务。可以在 app.com
到达。用户应该能够为他们的站点设置自定义域。
我正在苦苦挣扎的是如何维护会话,以便用户只需登录一次网络。如果他们访问网络上的任何站点,则应维护他们的会话。 (从技术上讲,用户仍然在同一个站点上,只是为他们访问的站点自定义 URL。)
如何在应用程序的所有站点上维护用户的会话?
根据我对 cookie 的了解,这很难 b/c cookie 不能在唯一域之间共享。我正在寻找的是帮助理解问题的各个部分。如果需要的话,我愿意编写机架中间件或在应用程序前面添加其他技术。最终,我想让这些域中的每一个都可以使用 HTTPS,但我们现在先不考虑它。
您可以通过一系列重定向来转移会话。
假设您有一个域名为 platform.com
的应用,并且您在此平台上托管自定义域名,例如 customdomain.com
。如问题中所述,只要用户登录 platform.com
,他们就应该登录所有托管域。
基本思路是这样的:
- 用户登录
platform.com
- 用户在
customdomain.com
上请求了一个页面
- 应用服务器看到来自
customdomain.com
的请求,发现用户没有登录到 customdomain.com
。
- 应用程序服务器重定向到
platform.com/get_session?redirect=customdomain.com
- 应用程序服务器重定向到
customdomain.com/set_session?login_token=<HASH>
- 应用程序服务器设置会话 cookie 以响应
set_session
瞧!!用户会话现已从 platform.com
转移到 customdomain.com
。
警告:这里的挑战在于应用程序何时决定重定向的细节。您需要添加逻辑以确保您不会陷入无限的重定向循环。
场景如下:
我在一台机器上有一个 Rails 应用程序 运行。本次讨论的应用程序是一个内容管理系统,将用于为网络中的多个站点提供服务。可以在 app.com
到达。用户应该能够为他们的站点设置自定义域。
我正在苦苦挣扎的是如何维护会话,以便用户只需登录一次网络。如果他们访问网络上的任何站点,则应维护他们的会话。 (从技术上讲,用户仍然在同一个站点上,只是为他们访问的站点自定义 URL。)
如何在应用程序的所有站点上维护用户的会话?
根据我对 cookie 的了解,这很难 b/c cookie 不能在唯一域之间共享。我正在寻找的是帮助理解问题的各个部分。如果需要的话,我愿意编写机架中间件或在应用程序前面添加其他技术。最终,我想让这些域中的每一个都可以使用 HTTPS,但我们现在先不考虑它。
您可以通过一系列重定向来转移会话。
假设您有一个域名为 platform.com
的应用,并且您在此平台上托管自定义域名,例如 customdomain.com
。如问题中所述,只要用户登录 platform.com
,他们就应该登录所有托管域。
基本思路是这样的:
- 用户登录
platform.com
- 用户在
customdomain.com
上请求了一个页面
- 应用服务器看到来自
customdomain.com
的请求,发现用户没有登录到customdomain.com
。 - 应用程序服务器重定向到
platform.com/get_session?redirect=customdomain.com
- 应用程序服务器重定向到
customdomain.com/set_session?login_token=<HASH>
- 应用程序服务器设置会话 cookie 以响应
set_session
瞧!!用户会话现已从 platform.com
转移到 customdomain.com
。
警告:这里的挑战在于应用程序何时决定重定向的细节。您需要添加逻辑以确保您不会陷入无限的重定向循环。