我的Rails应用目前可在 example.org 上找到,但我想切换到 example.com
在routes.rb
中执行通配符301重定向不是问题,但是我还想保留用户会话。由于新域名无法访问旧域名的Cookie,因此将用户重定向到新域名并仍然让他/她登录的最佳(安全且尽可能简单)方法是什么?
我发现很多线程都在谈论使用复杂的身份验证令牌方法设置跨域Web应用程序,但我正在寻找一次性单向迁移,所以我希望解决方案更简单此
有什么建议吗?
我正在使用Ruby on Rails 3,OmniAuth,并使用默认的'cookie_store'作为我的会话存储。
答案 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站点上登录,则将令牌附加到查询。