Как включить ассоциацию пользователя has_many при входе в ответ от devise?

#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