【问题标题】:How do I maintain session in Rails app with support for multiple domains?如何在支持多个域的 Rails 应用程序中维护会话?
【发布时间】:2016-12-11 05:47:07
【问题描述】:

这是场景:

我有一个 Rails 应用程序在一台机器上运行。本次讨论的应用程序是一个内容管理系统,将用于为网络中的多个站点提供服务。可以通过app.com 联系。用户应该能够为其网站设置自定义域。

我正在努力解决的是如何维护会话,以便用户只需登录网络一次。如果他们访问网络上的任何站点,则应保持他们的会话。 (从技术上讲,用户仍然在同一个站点上,只是为他们访问的站点提供了一个自定义 URL。)

如何在应用上的所有网站上为用户维护会话?

根据我所读到的关于 cookie 的内容,很难在唯一域之间共享 b/c cookie。我正在寻找的是帮助理解问题的各个部分。如果需要的话,我喜欢编写机架中间件或在应用程序前面添加其他技术。最后,我想让这些域中的每一个都可以使用 HTTPS,但现在让我们先把它放在一边。

【问题讨论】:

    标签: ruby-on-rails session ruby-on-rails-5 multiple-domains


    【解决方案1】:

    您可以通过一系列重定向转移会话。

    假设您有一个域为platform.com 的应用,并且您在此平台上托管了customdomain.com 等自定义域。如问题中所述,每当用户登录 platform.com 时,他们都应该登录所有托管域。

    基本思路是这样的:

    1. 用户登录platform.com
    2. 用户在customdomain.com 上请求页面
    3. 应用服务器看到来自customdomain.com的请求,发现用户没有登录customdomain.com
    4. 应用服务器重定向到platform.com/get_session?redirect=customdomain.com
    5. 应用服务器重定向到customdomain.com/set_session?login_token=<HASH>
    6. 应用服务器设置会话cookie以响应set_session

    瞧!!用户的会话现在从platform.com 转移到customdomain.com

    警告:这里的挑战在于应用程序何时决定重定向的细节。您需要添加逻辑以确保您不会陷入无限重定向循环。

    【讨论】:

      猜你喜欢
      • 2011-03-24
      • 2013-11-28
      • 2023-03-14
      • 2011-03-14
      • 2011-08-02
      • 1970-01-01
      • 2012-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多