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

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

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

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

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


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

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

任何建议表示赞赏!

您可以在主域中的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加载之前添加事件监听器。