Rails,Devise和多个域

假设我有一个应用程序将从完全不同的域访问,这些域都指向同一台服务器*:

example.com,example.net,f​​oobar.com,…

我有一个基于Devise的身份validation系统,之前运行良好。 但是,现在的目标是将HTTPS添加到登录系统中。 问题是,事实certificate,没有办法在同一个IP地址上托管多个HTTPS网站**。 要解决此问题,我将登录页面设置为始终POST到https://secure.example.com 。 据我所知,这工作正常。 设计似乎没有任何疑虑。 然而,棘手的部分是用户现在需要被重定向到foobar.com,这也需要了解用户已登录。我通过网站返回登录表单中的隐藏参数,并重定向工作良好。 我仍无法通知foobar.com用户现已登录。

我已设法将其设置为在返回foobar.com后,将用户的secure.example.com会话cookie复制到foobar.com的新cookie中。 这部分工作正常。 但是,在Rails控制台中,web请求secure.example.com和foobar.com – 为每个发送相同的cookie – 产生两个完全不同的会话,因此,难怪Devise的行为就像用户从未登录过foob​​ar.com

有谁知道为什么这不起作用 – 为什么两个相同的Web请求(只有请求URI的域名不同 – 我也在Firebug中尝试过)会在Rails 3应用程序中生成两个完全不同的会话,但会有不同但一致的,会话ID? 更重要的是,有谁知道如何使这项工作?

*为了本练习的目的,假设这是不可避免的,并且站点不能在不同的子域下托管,并且所需的域数太多,无法为每个域获取单独的IP地址。

**除非它们是子域名并且您拥有* .example.com证书,但这不是重点。

如果您已经在使用Devise,我建议您尝试使用令牌validation 。 您可以为相关用户生成令牌,使用令牌重定向以登录,然后在签名后快速使令牌过期。

您也可以尝试使用门卫滚动自己的OAuth提供程序。