如何使用Rails在多个域之间共享用户会话?

时间:2008-11-08 04:58:58

标签: ruby-on-rails session single-sign-on production

是否有人知道任何宝石,教程或解决方案,使用户能够在一个域中登录网站并自动在同一会话中访问其他合作伙伴域?

我有两个rails应用程序正在运行,我们称之为App-A和App-B。 App-A有一个与之关联的数据库,为App-A.com的注册和登录提供支持。我现在想让所有拥有App-A.com帐户的用户访问App-B.com,而无需重新注册或手动登录App-B.com。

提前感谢您的帮助! --mark

2 个答案:

答案 0 :(得分:5)

您可以在两个应用中设置相同的session_key。在appA environment.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中,您只需要验证会话中是否存在user_id。

这是整体架构,您可以使用这个想法详细说明。

答案 1 :(得分:1)

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