[英]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.