在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加载之前添加事件监听器。