切换到新域名时保持用户会话(Ruby on Rails)

时间:2013-10-30 22:35:10

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

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

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

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

有什么建议吗?

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

1 个答案:

答案 0 :(得分:2)

您可以像发送带有身份验证令牌的电子邮件链接一样执行此操作。检查以确认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站点上登录,则将令牌附加到查询。