Ruby On Rails - 覆盖devise_token_auth中的呈现方法

时间:2016-04-03 13:56:34

标签: ruby-on-rails ruby serialization devise

我目前正在使用devise_token_auth为我的Rails API实现基于安全令牌的身份验证。此gem生成具有某些属性的User模型。向我的用户模型添加一些自定义属性后,由devise_token_auth提供的用户管理(登录,注销...)路由将继续呈现相同的旧属性。

我尝试过添加UserSerializer,但没有解决问题。

是否有人知道如何使用devise_token_auth

呈现用户模型的自定义数据

---编辑---

我正在阅读宝石文档并发现它可以override rendering methods,但我真的不知道如何。

2 个答案:

答案 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