2016-08-04 74 views
0

這裏是場景:如何在支持多個域的Rails應用程序中維護會話?

我有一個Rails應用程序運行在一臺機器上。爲討論起見,該應用程序是一個內容管理系統,將用於爲網絡中的多個站點提供服務。它可以在app.com達到。用戶應該能夠爲他們的網站設置一個自定義域。

我在努力的是如何維護會話,以便用戶只需登錄一次網絡。如果他們訪問網絡上的任何站點,他們的會話應該保持。 (從技術上來說,用戶仍然在同一個網站上,只是爲他們訪問的網站定製了一個URL)。

如何在應用上的所有網站上爲用戶維護會話?

根據我已閱讀的cookies,這是困難的B/C cookie不能在唯一的域之間共享。我正在尋找的是幫助理解問題的部分。如果這是需要的,我可以在應用程序前面編寫Rack Middleware或添加其他技術。最終,我希望使這些域中的每個域都可以使用HTTPS,但是現在讓我們開始放棄這一點。

回答

0

您可以通過一系列重定向來傳輸會話。

比方說,您有一個域名爲platform.com的應用,並且您在此平臺上託管了自定義域名,如customdomain.com。正如問題中所述,無論用戶何時登錄platform.com,都應該在所有託管域上登錄。

的基本思路是這樣的:

  1. 用戶登錄到platform.com
  2. 用戶請求customdomain.com頁面
  3. 應用服務器看到來自customdomain.com請求,並認爲該用戶沒有登錄在customdomain.com
  4. 應用服務器重定向到platform.com/get_session?redirect=customdomain.com
  5. 應用服務器重定向到customdomain.com/set_session?login_token=<HASH>
  6. 應用服務器響應set_session

瞧設置會話cookie!用戶的會話現在從platform.com轉移到customdomain.com

警告:這裏的挑戰在於應用程序何時決定重定向的細節。您需要添加邏輯以確保您不會在無限重定向週期中結束。

相關問題