如何在Rails中跨多个域共享用户会话?

9

请问是否有任何宝石(gems)、教程(tutorials)或解决方案(solutions),让用户在一个域名(domain)上登录网站后,可以在同一会话(session)中自动访问其他合作伙伴域名(partner domains)的网站?

我有两个正在运行的 Rails 应用程序,我们称它们为 App-A 和 App-B。App-A 有与之关联的数据库,用于注册和登录 App-A.com。现在,我想让所有在 App-A.com 上注册的用户能够访问 App-B.com,而无需让他们重新注册或手动单独登录到 App-B.com。

感谢您的帮助! --Mark

2个回答

5
你可以在两个应用程序中设置相同的session_key。在appA环境.rb中更改session_key,像这样:
Rails::Initializer.run do |config|
   ...  
 config.action_controller.session = {
   :session_key => '_portal_session',
   :secret      => '72bf006c18d459acf51836d2aea01e0afd0388f860fe4b07a9a57dedd25c631749ba9b65083a85af38bd539cc810e81f559e76d6426c5e77b6064f42e14f7415'
  }
  ...
end

在AppB中做同样的事情。(记得使用完全相同的密钥)
现在你有了共享会话。假设你使用restfull_authentication,它设置了一个名为user_id的会话变量。当你在appA中进行身份验证时,它会将user_id设置在会话中。现在,在appB中,你只需要验证用户ID是否存在于会话中。
这是总体方案,你可以使用这个想法进行更详细的阐述。

3
据我所知,只有当两个应用程序在同一个域上时,这才能起作用? - gtd
2
没错,这个解决方案无法跨多个域工作。 - TuteC

1
如果您想为应用程序创建单点登录解决方案,我建议您查看RubyCAS解决方案。它也可以用于为其他非Rails应用程序提供单点登录,同时您还可以将身份验证与LDAP或其他身份验证提供者集成。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接