Я добавил вики-страницу, показывающую правильный способ сделать это с помощью приложения с ошибками (как Стивен первоначально намекнул):
Ключ должен переопределить метод route
, например:
# app/lib/my_failure_app.rb
class MyFailureApp < Devise::FailureApp
def route(scope)
:new_user_registration_url
end
end
, а затем попросите Devise использовать ваше приложение для сбоя:
# config/initializers/devise.rb
config.warden do |manager|
manager.failure_app = MyFailureApp
end
Этот подход предпочтительнее, чем переопределение authenticate_user!
в вашем контроллере, потому что он не будет мешать многим "закулисным" вещам, которые делает Devise, таким как сохранение попытанного URL, чтобы пользователь мог быть перенаправлен после успешного входа.
с несколькими типами пользователей
Если у вас есть Admin
и User
Разрабатывайте ресурсы, вы, вероятно, захотите оставить по умолчанию функциональность «нового сеанса» для администраторов. Вы можете сделать это довольно легко, проверив, какой тип области обрабатывается:
# app/lib/my_failure_app.rb
class MyFailureApp < Devise::FailureApp
def route(scope)
scope.to_sym == :user ? :new_user_registration_url : super
end
end