2010-06-06 88 views
1

我有一個Rails論壇產品,位於我的客戶的子域下(即http://forum.customer.com)。他們的主要網站有一個CMS和一個認證系統,而我的論壇產品有一個單獨的認證系統。在這些系統中是否有一種優雅的方式來「交叉簽名」?我想要一個已經登錄到主CMS的人無縫地(儘可能)轉換到我的產品中。在Rails中在論壇和主CMS之間共享認證

回答

0

這一切都取決於主站點如何跟蹤用戶的會話。

這通常使用cookie來完成;我只是假設它是。瀏覽器將這個Cookie 存儲的域名相關聯,並將其重新附加到該域名或其子域的任何新請求。

您需要檢查cookie是否附加到customer.com域,而不是例如www.customer.com。這是因爲forum.customer.com是前者的子域,而不是後者。你在不會在後一種情況下在你的論壇軟件中看到cookie。 CMS軟件可以控制cookie連接到哪個確切域。

大多數瀏覽器都有一個選項來顯示爲特定站點存儲哪些cookie。例如,Firefox在右鍵菜單中有一個「頁面信息」選項。在Chrome中,您可以點擊Ctrl + Shift + 找到開發者工具,並在「存儲」標籤下查找。

該Cookie可能包含以下之一:

  • 實際數據,如用戶名。
  • CMS可以在其數據庫中查找的會話ID,從而檢索用戶名。

在任何一種情況下,它也可能包含鹽漬散列,這可以防止用戶篡改cookie的數據。

您可以通過名稱在Rails中使用簡單的cookies[:something]從控制器中訪問Cookie。這記錄在ActionController::Cookies(其混入ActionController::Base)中。

一旦你有了cookie的數據,你就必須模仿你的CMS做的任何事情。您可能必須(按順序):

  • 通過(重新)對cookie數據應用散列函數並將其與cookie中包含的散列進行比較,驗證cookie的完整性。
  • 連接到CMS數據庫。
  • 可能查詢會話ID。
  • 查詢用戶的配置文件。