在Rails中共享论坛和主CMS之间的身份验证

时间:2010-06-06 09:13:12

标签: ruby-on-rails

我有一个Rails论坛产品,它位于我的客户的子域下(即http://forum.customer.com)。他们的主站点有一个CMS和一个身份验证系统,我的论坛产品有一个单独的身份验证系统。是否有一种优雅的方式在这些系统中进行“交叉登录”?我希望已经登录主CMS的人能够无缝地(尽可能)过渡到我的产品。

1 个答案:

答案 0 :(得分:0)

这完全取决于主站点如何跟踪用户的会话。

通常使用cookie来完成;我只是假设它是。浏览器会将此Cookie 存储在其中,并将其与任何新请求一起附加到该域或子域

您需要检查Cookie是否已附加到customer.com域,而不是www.customer.com。这是因为forum.customer.com是前者的子域,而不是后者。在后一种情况下,不会在您的论坛软件中看到cookie。 CMS软件可以控制cookie附加到哪个确切的域。

大多数浏览器都可以选择向您显示为特定网站存储的Cookie。例如,Firefox在右键菜单中有一个“页面信息”选项。在Chrome中,您可以点击 Ctrl + Shift + I 来访问开发人员工具,然后在“存储”标签下查看。

Cookie可能包含以下内容之一:

  • 实际数据,例如用户名。
  • CMS可以在其数据库中查找的会话ID,从而检索用户名。

在任何一种情况下,它都可能包含盐渍哈希,这可以防止用户篡改cookie的数据。

您可以使用控制器内的cookies[:something]按名称访问Rails中的cookie。这在ActionController::Cookies中有记录(混合到ActionController::Base中)。

获得Cookie的数据后,您必须模仿您的CMS所做的一切。你可能必须(按顺序):

  • 通过(重新)将哈希函数应用于cookie数据并将其与cookie中包含的哈希进行比较来验证cookie的完整性。
  • 连接到CMS数据库。
  • 可能会查询会话ID。
  • 查询用户的个人资料。