2011-04-05 176 views
2

我使用Rail3與Devise寶石。當你需要鎖定用戶登錄時,它做得非常好。Rails:註銷事件登錄用戶

但是它只適用於新的登錄嘗試。 如果他已經登錄 - 它不會立即將他簽出。

這裏是典型的用例:

鑑於管理員用戶 時,他將其鎖定特定用戶的可疑行爲檢測與malicious_user.lock('locking-reason')

% can config/initializers/session_store.rb 
AppFoo::Application.config.session_store :cookie_store, :key => '_foo_session' 

回答

1

由於HTTP的無狀態性,你不能馬上註銷用戶,因爲您需要等待,直到他們向您的服務器發出另一個請求。你可以通過推送服務來解決這個問題,但這可能會過度。

我的解決方案是將該人員添加到黑名單,然後檢查他們是否在黑名單上,只要他們嘗試訪問僅供登錄用戶使用的部分。這會使他們無法登錄,直到您決定他們的活動是否可疑爲止。

例子:

用戶懷疑難耐活動

管理員希望檢查了這一點,所以他們暫時將用戶添加到黑名單中。

用戶在添加到黑名單時單擊當前所在頁面的某個區域。

代碼檢查登錄狀態和列入黑名單的用戶。

由於用戶被列入黑名單,他們被告知,他們需要登錄訪問內容

一旦用戶嘗試再次登錄,你可以告訴他們,他們的帳戶已被暫時停用(或者你可以在上一步中做到這一點)。

1

也許最簡單的方法是,當你鎖定他們,所以將用戶重定向到註銷操作:

malicious_user.lock('locking-reason') 
redirect_to '/logout' and return 

我不熟悉的設計所以這可能不是最好的解決辦法,甚至可能的,但這是我將如何處理這個問題

+0

redirect_to的「/註銷」將重定向Admin用戶沒有惡意。我正在鎖定來自管理員的用戶 – user80805 2011-04-05 14:23:22

1

使用在ApplicationController中一個的before_filter,將做以下

before_filter :kick_out_blocked_user 


protected 

def kick_out_blocked_user  
    unless current_user.try(:active?) 
     redirect_to destroy_user_session_path   
    end 
end