#ruby-on-rails #devise #devise-token-auth
Вопрос:
надеюсь, у вас, ребята, все хорошо,
У меня есть этот пользователь, у которого есть связь has_many с адресной моделью (у пользователя есть множество адресов). Как я могу настроить devise так, чтобы он возвращал все адреса пользователей при входе в систему?
Ассоциация уже хорошо работает, но я, похоже, не могу найти простое решение для этого, а не выполнять другой запрос, чтобы получить информацию об адресах от пользователя или, возможно, переопределить контроллер сеансов разработки. (чего я не пробовал, потому что не знаю, как это сделать, не испортив конфигурацию по умолчанию)
ОБНОВЛЕНИЕ: Я использую аутентификацию токена разработки для обработки сеансов
Ответ №1:
Devise::SessionsController#создать выглядит так:
class Devise::SessionsController < DeviseController
# ...
def create
self.resource = warden.authenticate!(auth_options)
set_flash_message!(:notice, :signed_in)
sign_in(resource_name, resource)
yield resource if block_given?
respond_with resource, location: after_sign_in_path_for(resource)
end
end
respond_with
является методом из драгоценного камня респондентов и фактически генерирует ответ. Самым простым способом было бы просто переопределить метод, но вы также можете создать свой собственный ответчик, который описан в файле readme.
class MySessionsController < Devise::SessionsController
private
def respond_with(resource, **options)
return super unless action_name == 'create'
# generate whatever response you want
end
end
# config/routes.rb
devise_for :users, controllers: {
sessions: 'my_sessions'
}
Комментарии:
1. Он возвращает код 401, когда я пытаюсь вернуться, используя ваш код… Разница только в routes.rb в том, что вместо настройки контроллера для devise_for я делаю это для mount_devise_auth_token_for
Ответ №2:
Решено путем реализации ответа, найденного в этом вопросе:https://github.com/lynndylanhurley/devise_token_auth/вопросы/597#issuecomment-291893591
пользователь.rb
def token_validation_response
self.as_json(include: :addresses)
end