2013-12-13 82 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