Ruby on rails Rails、Desive和多个域

Ruby on rails Rails、Desive和多个域,ruby-on-rails,ruby,https,devise,cross-domain,Ruby On Rails,Ruby,Https,Devise,Cross Domain,假设我有一个应用程序,可以从完全不同的域访问,这些域都指向同一台服务器*: example.com、example.net、foobar.com 我有一个基于设计的认证系统,以前工作得很好。但是,现在的目标是将HTTPS添加到登录系统中。问题是,事实证明,无法在同一IP地址**上托管多个HTTPS网站。为了解决这个问题,我将登录页面设置为始终发布到。据我所知,这很好用。这项发明似乎毫无疑问。然而,棘手的是,用户现在需要重定向到foobar.com,它还需要了解用户已登录。我通过登录表单中的隐藏参

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

example.com、example.net、foobar.com

我有一个基于设计的认证系统,以前工作得很好。但是,现在的目标是将HTTPS添加到登录系统中。问题是,事实证明,无法在同一IP地址**上托管多个HTTPS网站。为了解决这个问题,我将登录页面设置为始终发布到。据我所知,这很好用。这项发明似乎毫无疑问。然而,棘手的是,用户现在需要重定向到foobar.com,它还需要了解用户已登录。我通过登录表单中的隐藏参数传递要返回的站点,重定向工作正常。我仍然无法通知foobar.com用户现在已登录

我已经成功地对其进行了设置,以便在返回foobar.com时,它将用户的secure.example.com会话cookie复制到foobar.com的新cookie中。这部分工作正常。然而,在Rails控制台中,对secure.example.com和foobar.com的web请求(每个请求发送相同的cookie)会产生两个完全不同的会话,因此,Desive的行为就像用户从未登录到foobar.com一样也就不足为奇了

有人知道为什么这不起作用吗?为什么两个相同的web请求(只有请求URI的域不同——我也在Firebug中尝试过)会在Rails 3应用程序中产生两个完全不同的会话,会话ID不同但一致?更重要的是,有人知道如何做到这一点吗

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


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

如果您已经在使用designe,我建议您尝试使用。您可以为有问题的用户生成令牌,使用令牌重定向他们以进行登录,然后在他们登录后快速使令牌过期


您还可以尝试使用自己的OAuth提供程序。

**至少,token authenticatable工作得很好,这是一个相当干净的小解决方案!非常感谢。如果有人决定步我的后尘,请允许我指出,您可能会遇到问题,除非您在筛选某些内容之前预先添加\u以注销当前用户(如果会话控制器中存在)。“否则,迪安喜欢认为它比你聪明。”杰克·海马克和烧焦的器皿我有一个问题。假设用户已经登录到domain1.com,当他进入domain2.com时,系统如何知道该用户已经登录?如何使用designe在多个域之间共享会话?@Chamnap您不共享会话。你通过传递令牌来“伪造”它。它类似于您有时在登录到站点的电子邮件(如密码重置)中获得的令牌。@Chamnap将令牌作为参数重定向:example.com/?token\u id=(检查令牌可验证文档中的参数名称/格式)