2013-05-02 188 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

相關問題