2013-05-02 159 views
2

目前我有两台服务器的设置,每台服务器都有自己的事情,但我想在它们之间有一个统一的登录。现在,一个门户的登录表单只是通过一个API将用户名/密码发送到Rails门户,然后它发送一个auth令牌,然后我们将其存储在会话中并用于将来的身份验证和API调用。在rails服务器和php服务器之间共享会话

因此,问题在于,访问我们网站的用户必须在每个门户中登录一次,因为Ruby API不与我们进行通信,并且在API被ping通时Ruby端不会对会话执行任何操作但发送给我们回授权令牌。

我最初的想法是在我们向API发送证书时让Rails方创建会话,但显然这不起作用,因为他们将无法在用户浏览器中设置会话ID,或者至少这是我被告知的。

如果Ruby方面转移到使用数据库进行会话存储,是否可以缓解此问题?基本上,我想保留在Ruby端的大部分变化。

回答

0

我们结束了一个稍微不同的路线。基本上,每一方都会在数据库中查找auth令牌,然后通过每个链接上的查询字符串将其传递给另一方。例如,如果用户在PHP端登录,Ruby端通过API接收用户名和密码,创建一个授权令牌并更新数据库,然后发回令牌。然后PHP端将该令牌存储在会话中,并通过查询字符串(?authToken = blahblah)将其发送回Ruby端,该端一直在监听它们。如果它看到auth令牌,它会检查数据库以确保匹配,如果存在,则在Rails会话中验证用户。相反,Ruby端的登录表单只是更新数据库中的认证令牌,并且指向PHP端的链接也会通过认证令牌。那边进行同样的检查,并在有匹配的情况下进行验证。

0

我已经在Ruby on Rails和PHP之间使用memcache概念实现了会话共享。我在这方面取得了成功。如果你熟悉memcache概念,那么它对你很有用。如果你需要任何帮助,那么我可以与你分享。

+0

有没有理由不能在数据库中?我的问题是,我不熟悉rails,但我认为它能够轻松地切换到数据库的会话。 Symfony2是我们的PHP方面,可以轻松地将数据库用于其自己的会话。但在这种特殊情况下,我们实际上甚至不需要每次说“分享”会话,因为唯一需要发生的是某种跨站点登录。我假设如果Rails使用数据库进行会话,将凭据发送到API并且Ruby端可以将用户登录到 – jonathonh 2013-05-03 17:03:48

+0

是没有问题的。你的猜测是对的。 Rails会话可以存储到数据库中。您只需像往常一样创建一个表来存储会话,并轻松地从中获取会话数据。在这里,我的问题是我不喜欢symfony2。只有我是家庭核心的PHP。无论如何,您可以将导轨会话存储在数据库中 – Kushal 2013-05-04 03:59:20