Где должны быть помещены обратные вызовы хранителей в приложении rails?

Я относительно новичок в рельсах. Я настроил Devise и хочу запустить код обратного вызова после входа пользователей.

Глядя на вики-страницу Warden, я могу использовать обратный вызов after_set_user для выполнения этой логики, например:

Warden::Manager.after_set_user do |user, auth, opts|
  unless user.active?
    auth.logout
    throw(:warden, :message => "User not active")
  end
end

Тем не менее, я не уверен, где я должен хранить эти вещи. Моя первая мысль, что я мог бы положить его в config/initializers/devise.rb. Это верно? Неправильно помещать то, что по сути является кодом контроллера, в директорию config.

1 ответ

Решение

При загрузке приложения требуются ловушки Warden, поэтому в инициализаторе Devise по адресу config/initializers/devise.rb это хороший кандидат.

Тем не менее, поведение, которое вы хотите достичь, будет лучше реализовано с помощью этой функции Devise:

https://github.com/plataformatec/devise/wiki/How-To:-Customize-user-account-status-validation-when-logging-in

Другие вопросы по тегам