【问题标题】:Persisting user sessions when switching to a new domain name (Ruby on Rails)切换到新域名时保持用户会话(Ruby on Rails)
【发布时间】:2013-11-10 18:51:09
【问题描述】:

我的 Rails 应用目前在 example.org 上可用,但我想切换到 example.com

routes.rb 中执行通配符 301 重定向不是问题,但我也希望保留用户会话。由于新域无法访问旧域的 cookie,将用户重定向到新域并仍然让他/她登录的最佳(安全且尽可能简单)方法是什么?

我发现许多线程都在谈论使用复杂的身份验证令牌方法设置跨域 Web 应用程序,但我正在寻找一次性单向迁移,所以我希望解决方案会更简单这个。

有什么建议吗?

我正在使用 Ruby on Rails 3、OmniAuth,并使用默认的“cookie_store”作为我的会话存储。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 session cross-domain


    【解决方案1】:

    您可以像发送带有身份验证令牌的电子邮件链接一样执行此操作。检查以验证example.org 上的 cookie 是否正确,如果正确,请将它们重定向到:

    http://example.com?token=<their token>
    

    然后检查以确保令牌到达时与您在数据库中的令牌匹配。如果令牌匹配,则为 example.com 域创建会话 cookie,然后更改数据库中的令牌。

    这将成功地从一个域转移到另一个域,同时在新域上提供持久登录(通过 cookie)并通过更改数据库中的身份验证令牌来关闭它们背后的门。

    编辑

    要在下面回答您的问题,我认为您不需要中间件或任何花哨的东西。您可以在 example.org 的应用程序控制器中做一个简单的前置过滤器,例如:

    before_filter :redirect_to_dot_com
    ...
    def redirect_to_dot_com
      url = "http://example.com" + request.fullpath
      url= destination + (url.include?('?') ? '&' : '?') + "token=#{current_user.token}" if signed_in?
      redirect_to url, status: 301
    end
    

    这将重定向用户,如果用户在 .org 网站上登录,则将令牌附加到查询中。

    【讨论】:

    • 你会推荐在机架中间件或其他地方这样做吗?用户可以访问 example.org 上的任何页面,并且应该被 301 重定向到 example.com 上添加令牌的同一页面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多