我目前正在使用devise_token_auth
为我的Rails API实现基于安全令牌的身份验证。此gem生成具有某些属性的User模型。向我的用户模型添加一些自定义属性后,由devise_token_auth
提供的用户管理(登录,注销...)路由将继续呈现相同的旧属性。
我尝试过添加UserSerializer,但没有解决问题。
是否有人知道如何使用devise_token_auth
?
---编辑---
我正在阅读宝石文档并发现它可以override rendering methods,但我真的不知道如何。
答案 0 :(得分:3)
doc的含义是,可以使用您自己的Controller来替换基本的注册/会话/密码/令牌验证控制器。
为了举例,假设您要覆盖DeviseTokenAuth提供的RegistrationsController。
首先,您需要创建自己的控制器,继承自基本控制器:
# app/controllers/custom/registration_controller.rb
class Custom::RegistrationsController < DeviseTokenAuth::RegistrationsController
def render_create_success
# here, the @resource is accessible, in your case, a User instance.
render json: {status: 'success', data: @resource.as_json}
end
end
然后你需要告诉路由到你的新控制器:
# config/routes.rb
mount_devise_token_auth_for 'User', at: 'auth', controllers: {
registrations: 'custom/registrations'
}
答案 1 :(得分:0)
dvxam's answer and thelastinuit helped me figure out how to implement the solution.
First, I created a method in my User model:
def token_validation_response
UserSerializer.root = false
UserSerializer.new(self).as_json
end
Then, in app/controllers/custom/registration_controller.rb
, overriding render_create_success
the following way :
def render_create_success
render json: @resource.token_validation_response ##@resource is a user instance
end