Rails中跨域的会话4

res*_*res 6 cookies ruby-on-rails cross-domain ruby-on-rails-4

我有一个想要跨域使用会话(不是子域)的问题.例如,我有.co.uk,.com.au和.com都为同一地址.

我知道子域名我可以使用类似的东西:

SomeApp::Application.config.session_store :cookie_store, key: '_some_app_session', domain => :all, :tld_length => 2
Run Code Online (Sandbox Code Playgroud)

但我希望我的解决方案在实际域之间工作,以便拥有一组会话/ cookie.

use*_*220 2

由于您的默认会话存储是“cookie_store”

您可以按照与发送带有身份验证令牌的电子邮件链接相同的方式进行操作。检查以验证 example.org 上的 cookie 是否正确,如果正确,则将其重定向到:

http://example.com?token= 然后检查以确保令牌到达时与数据库中的令牌匹配。如果令牌匹配,请为 example.com 域创建会话 cookie,然后更改数据库中的令牌。

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

编辑

要回答下面的问题,我认为您不需要中间件或任何奇特的东西。您可以在 example.org 的应用程序控制器中执行简单的 before 过滤器,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

这将以任何一种方式重定向用户,并且如果用户在 .org 站点上登录,则将令牌附加到查询中。

转到有关切换到新域名时保留用户会话的更多详细信息 (Ruby on Rails)