如何使用 Rails 跨多个域共享用户会话?
是否有人知道任何宝石、教程或解决方案使用户能够登录一个域的网站并在同一会话中自动授予对其他合作伙伴域的访问权限?
我有两个正在运行的 Rails 应用程序,我们称它们为 App-A 和 App-B。 App-A 有一个与之关联的数据库,支持在 App-A.com 上的注册和登录。 我现在想让所有拥有 App-A.com 帐户的用户访问 App-B.com,而不需要让他们单独重新注册或手动登录 App-B.com。
预先感谢您的任何帮助! - 标记
Is anyone aware of any gems, tutorials, or solutions enabling a user to sign in to a website at one domain and automatically given access to other partner domains in the same session?
I have two rails apps running, let's call them App-A and App-B. App-A has a database associated with it, powering the registration and login at App-A.com. I'd now like to give all of those users with App-A.com accounts access to App-B.com, without making them reregister or manually login to App-B.com separately.
Thanks in advance for any help!
--Mark
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以在两个应用程序中设置相同的 session_key。 在appA的environment.rb中更改session_key,像这样
在AppB中执行相同的操作。 (记住使用相同的秘密)
现在您已经共享了会话。 假设您使用restfull_authentication,它设置一个名为user_id的会话变量。 当您在 appA 中进行身份验证时,它会在会话中设置 user_id。 现在,在 appB 中,您只需验证会话中是否存在 user_id 即可。
这是总体架构,您可以使用这个想法进行更详细的阐述。
You can set the same session_key in both apps. In appA environment.rb change the session_key, like this
Do the same in AppB. (remember to use the very same secret)
Now you have shared sessions. Let's say you use restfull_authentication, wich sets a session variable called user_id. When you authenticate in appA it sets the user_id in the session. Now, in appB you just have to verify if user_id exists in the session.
This is the overall schema, you can elaborate more using this idea.
如果您想为您的应用程序创建单点登录解决方案,那么我建议您查看 RubyCAS 解决方案。 它还可用于为其他非 Rails 应用程序提供单点登录,并且您可以将身份验证与 LDAP 或其他身份验证提供程序集成。
If you want to create single sign-on solution for your applications then I recommend to take a look at RubyCAS solution. It could be used also to provide single sign-on for other non-Rails applications as well as you can integrate authentication with LDAP or other authentication providers.