2011-06-09 60 views
1

上次我問這個問題我被誤解了。所以:設計退出

在我的Rails3應用程序中,我使用Devise進行身份驗證。我有要求說,每個用戶只能從一個瀏覽器登錄。這意味着如果用戶A登錄(例如在FF上),然後從其他計算機或其他瀏覽器(例如Chrome)請求登錄用戶A,則應該註銷第一個用戶。

我發現,我可以重寫SessionController並且它是create方法。然而,我沒有看到任何方式來檢查用戶是否具有給定的電子郵件(params [:email])當前登錄,此外我不知道應該調用哪種方法來銷燬此用戶會話。

回答

1

我只是爲會話中的每個頁面加載存儲一個時間戳。將before_filter與last_seen字段的用戶進行比較。如果上次看到的用戶在會話時間戳之後銷燬用戶會話。

+0

偉大而簡單的想法。在我的版本中:對於用戶模型的每個用戶實例,當給定登錄名的用戶登錄時,保留時間戳。另外,對於每個用戶會話也保留時間戳。通過每個操作,檢查模型中的時間戳是否等於會話中的時間戳。如果不是 - 銷燬用戶會話。 但是...如果給定的表單有正確的數據(電子郵件+密碼正確),如何檢查SessionsController的創建函數? 但... – 2011-06-10 10:35:14

+0

會話的身份驗證由設計處理,您不需要根據您的要求修改它。我只是把before_filter放在application_controller.rb中,而不是修改devise。 – mark 2011-06-10 11:10:10

+0

我找到了其他方法 - 我們可以繼承Devise :: SessionsController並覆蓋它的after_sign_in_path_for動作。接下來,我注意到,當用戶最後登錄時顯示的字段當前處於默認設計用戶模型(current_user.current_sign_in_at) – 2011-06-10 11:45:52