Настройка проверки статуса учетной записи пользователя при входе в систему
Иногда вы хотите добавить настраиваемую проверку пользователя перед входом в систему. В этом случае мне нужно было реализовать account_active boolean (trueили ложно) проверить.Так что если это правда, это позволит пользователю войти в систему и создать сеанс, если false, то будет отображаться ошибка «учетная запись не активна».
Перезаписать active_for_authentication?метод в вашей модели (пользователь) и добавьте свою логику проверки.Вы хотите вернуть super && (true или false)
def active_for_authentication?
# Uncomment the below debug statement to view the properties of the returned self model values.
# logger.debug self.to_yaml
super && account_active?
end
В этом случае он проверяет логическое значение на account_active и возвращает его значение методу входа, который его вызвал.
Оригинальная active_for_authentication?Метод можно найти в devise / lib / devise / models / authenticatable.rb.
Примечание: active_for_authentication?вызывается Devise после аутентификации пользователя и в каждом следующем запросе.Это значит, какой код вы добавляете в переопределение active_for_authentication?будет выполняться для каждого запроса во время сеанса пользователя.
Примечание: active_for_authentication?не вызывается для каждого запроса при использовании database_authenticatable.Он вызывается только при входе в систему.Не уверен, что это предполагаемое поведение.
Настроить сообщение об ошибке
Если метод 'active_for_authentication?'возвращает false, метод 'inactive_message' вызывается, пользователь получит уведомление за неактивность.Нам нужно также настроить сообщение:
def inactive_message
account_active? ? super : :account_inactive
end
Теперь это будет ссылаться на пользовательское сообщение для «account_inactive», а не «inactive», которое нам нужно определить в файле перевода devise.
devise:
failure:
inactive: 'Your account was not activated yet.'
account_inactive: 'Your account is not active.'
registrations:
signed_up_but_account_inactive: "Thanks for signing up. We'll let you know when your account is active"