Есть 3 способа войти в мои приложения с токеном приглашения:
- Вы уже вошли в систему
- У вас есть учетная запись, но вы не вошли в нее
- Вам необходимо зарегистрировать
Теперь меня интересует, как обрабатывать последние 2 ситуации в сочетании с Devise
, не повторяя одни и те же функции.
Контроллер отменяет обрабатываются из routes.rb:
devise_for :users, controllers: {
sessions: 'users/sessions',
registrations: 'users/registrations'
}
Переопределение after_sign_in/up_path
для сеансов и регистраций:
class Users::SessionsController < Devise::SessionsController
protected
def after_sign_in_path(resource)
handle_invite
super(resource)
end
end
class Users::RegistrationsController < Devise::RegistrationsController
protected
def after_sign_up_path_for(resource)
handle_invite
super(resource)
end
end
Где я должен разместить handle_invite
метод?
Я ищу решение, которое я могу поместить в свой UsersController
, потому что это кажется правильным местом для его размещения.:
class UsersController < ApplicationController
private
def handle_invite
# Some code getting the token and adding the user to a group
end
end
Я думал, что это должно сработать, потому что кажется, что Devise наследует этот контроллер:
class Users::SessionsController < Devise::SessionsController; end
class Devise::SessionsController < DeviseController; end
class DeviseController < Devise.parent_controller.constantize; end
Итак, я ожидал, что Devise.parent_controller.constantize
будет представлять UsersController
, но по какой-то причине handle_invite
нельзя назвать от дочерних контроллеров.