2013-12-13 2 views
1

У меня есть фильтр-контроллер, который должен выйти из системы, если их учетная запись истекла, но я не могу найти простой способ сделать это.Принудительный выход пользователя с помощью Devise

Я пробовал:

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

Но выше не работает, потому что Разрабатывают хочет УДАЛИТЬ действия на пути выхода из системы, так что вы не можете просто перенаправить на него.

ответ

5

active_for_authentication?

После аутентификации пользователя и в каждом запросе, Разрабатывают проверяет, является ли ваша модель активна по телефону model.active_for_authentication ?. Этот метод перезаписывается другими модулями разработки. Например,: confirmable перезаписывает .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

Смежные вопросы