如何在设计响应中包含用户 has_many 关联?
How to include user has_many association on sign in response from devise?
希望你们一切顺利,
我有这个用户,它与地址模型(用户 has_many 地址)有 has_many 关联。我如何配置 return 登录时的所有用户地址?
该关联已经运作良好,但我似乎无法找到一个简单的解决方案,而不是执行另一个请求以从用户那里获取地址信息,或者覆盖设计会话控制器。 (我没有尝试,因为我不知道如何在不弄乱默认配置的情况下准确地做到这一点)
更新:我正在使用设计令牌身份验证来处理会话
Devise::SessionsController#create 看起来像这样:
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
是 responders gem 中的一种方法,实际上会生成响应。最简单的方法是只重写该方法,但您也可以创建自己的响应程序,这在自述文件中有介绍。
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'
}
通过实施在这个问题中找到的答案解决:https://github.com/lynndylanhurley/devise_token_auth/issues/597#issuecomment-291893591
user.rb
def token_validation_response
self.as_json(include: :addresses)
end
希望你们一切顺利,
我有这个用户,它与地址模型(用户 has_many 地址)有 has_many 关联。我如何配置 return 登录时的所有用户地址?
该关联已经运作良好,但我似乎无法找到一个简单的解决方案,而不是执行另一个请求以从用户那里获取地址信息,或者覆盖设计会话控制器。 (我没有尝试,因为我不知道如何在不弄乱默认配置的情况下准确地做到这一点)
更新:我正在使用设计令牌身份验证来处理会话
Devise::SessionsController#create 看起来像这样:
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
是 responders gem 中的一种方法,实际上会生成响应。最简单的方法是只重写该方法,但您也可以创建自己的响应程序,这在自述文件中有介绍。
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'
}
通过实施在这个问题中找到的答案解决:https://github.com/lynndylanhurley/devise_token_auth/issues/597#issuecomment-291893591
user.rb
def token_validation_response
self.as_json(include: :addresses)
end