在Rails 5中共享域之间的登录cookie /会话

时间:2016-08-04 22:09:14

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

要完全清楚,我绝对是指域名之间的共享会话,而不仅仅是子域名。

无论如何,想象一下Tumblr您可以通过转到<name>.tumblr.com访问博客,但您也可以将其设置为使用自定义域。

我们正在尝试做类似的事情。您可以照常访问我们网站的一部分,也可以进行设置,以便您可以使用自定义域访问您的网站部分。

这里的重要部分是无论使用什么域,它都由同一个盒子处理。这不是SSO本身,因为我们只是从不同的域访问相同的Rails应用程序。

无论如何,问题是:最好的方法是,如果用户登录到我们的主站点,他们不必在通过自定义域访问我们的站点时再次登录。

基本上,我们希望这样做,以便用户登录一次,无论用户访问我们网站的域名是什么,他们都会保持登录状态。

感谢任何建议!

1 个答案:

答案 0 :(得分:0)

您可以在主域中的iframe中存储会话,并通过postMessage访问它。

您可以加载iframe包含以下内容:

parent.postMessage(JSON.stringify({user_id: <%=@user.id %>, token: <%=@token %>, etc...}), '<%= @target_origin || '*'%>');

和页面上的事件监听器使用此iframe处理此消息:

var listener = function (e) {
  if (e.origin === correctIframeTarget) {
    var data = JSON.parse(e.data);
    // etc...
};

if (window.addEventListener) {
  window.addEventListener('message', listener);
} else {
  window.attachEvent('onmessage', listener);
}

注意:应在iframe加载之前添加事件监听器。