2013-12-13 84 views
1

我有一個控制器過濾器,應該註銷一個用戶,如果他們的帳戶已過期,但我找不出一個簡單的方法來做到這一點。強制用戶註銷與設計

我想:

if user_signed_in? && current_user.status == 'expired' 
    redirect_to destroy_user_session_path 
end 

但上述方法無效,因爲設計要註銷路徑上刪除的行爲,所以你不能只是重定向到它。

回答

5

active_for_authentication?

認證用戶,並在每個請求後,制定檢查,如果你的模型是通過調用model.active_for_authentication活躍?該方法被其他設計模塊覆蓋。例如:可確認覆蓋.active_for_authentication?只有在您的模型得到確認後纔會返回true。

你自己覆蓋此方法,但如果你做什麼,不要忘記調用超:

def active_for_authentication? 
    super && special_condition_is_valid? 
end 

看那documentation,瞭解更多信息和實例。這doc也將幫助你。

+0

謝謝,這幾乎讓我在那裏。問題在於,我無法區分尚未確認的用戶(我使用可確認的)和因其他原因(過期/暫停/等)而處於非活動狀態的用戶。有任何想法嗎? – Yarin

+2

想通了 - 你只需要覆蓋用戶的'inactive_message'以獲得正確的條件 - 請參閱http://stackoverflow.com/a/14966003/165673 – Yarin