Предполагая, что вы хотите видеть эти контроллеры, чтобы изменить или переопределить их, Devise теперь предоставляет простой генератор, который воссоздает их контроллеры в вашем приложении, чтобы упростить это. Согласно документация (которая будет наиболее актуальной):
1) Создайте свои собственные контроллеры, используя генератор, для которого требуется область действия:
Консоль
rails generate devise:controllers [scope]
Если вы укажете users
в качестве области действия, контроллеры будут созданы в app/controllers/users/
. И контроллер сессий будет выглядеть так:
class Users::SessionsController < Devise::SessionsController
# GET /resource/sign_in
# def new
# super
# end
...
end
2) Скажите маршрутизатору использовать этот контроллер:
devise_for :users, controllers: { sessions: "users/sessions" }
3) Скопируйте виды из devise/sessions
в users/sessions
. Поскольку контроллер был изменен, он не будет использовать представления по умолчанию, расположенные в devise/sessions
.
4) Наконец, измените или продлите желаемые действия контроллера.
Вы можете полностью переопределить действие контроллера:
class Users::SessionsController < Devise::SessionsController
def create
# custom sign-in code
end
end
Или вы можете просто добавить новое поведение к нему:
class Users::SessionsController < Devise::SessionsController
def create
super do |resource|
BackgroundWorker.trigger(resource)
end
end
end
Это полезно для запуска фоновых заданий или регистрации событий во время определенных действий.
Помните, что Devise использует флеш-сообщения, чтобы пользователи знали, был ли вход успешным или неудачным. Devise ожидает, что ваше приложение вызовет flash[:notice]
и flash[:alert]
в зависимости от ситуации. Не печатайте весь флэш-хэш, печатайте только определенные ключи. В некоторых случаях Devise добавляет ключ :timedout
к хэшу флэш-памяти, который не предназначен для отображения. Удалите этот ключ из хеша, если вы собираетесь напечатать весь хеш.