簡體   English   中英

Ruby On Rails-在devise_token_auth中覆蓋渲染方法

[英]Ruby On Rails - override rendering methods in devise_token_auth

我目前正在使用devise_token_auth為我的Rails API實現基於安全令牌的身份驗證。 該gem生成具有某些屬性的User模型。 在向我的用戶模型添加一些自定義屬性后,由devise_token_auth提供的用戶管理(登錄,注銷...)路由繼續呈現相同的舊屬性。

我嘗試添加UserSerializer,但沒有解決問題。

有誰知道如何使用devise_token_auth為用戶模型呈現自定義數據?

-編輯-

我正在閱讀gem文檔,發現可以覆蓋渲染方法 ,但是我真的不知道如何。

該文檔的意思是,有可能使用您自己的控制器來代替基本的注冊/會話/密碼/令牌驗證控制器。

舉例來說,假設您要覆蓋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'
}

dvxam的答案和thelastinuit幫助我弄清楚了如何實施該解決方案。

首先,我在用戶模型中創建了一個方法:

def token_validation_response                                                                                                                                         
  UserSerializer.root = false
  UserSerializer.new(self).as_json
end

然后,在app/controllers/custom/registration_controller.rb ,通過以下方式覆蓋render_create_success

def render_create_success
  render json: @resource.token_validation_response ##@resource is a user instance
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM