2016-04-03 1 views
2

В настоящее время я использую devise_token_auth для реализации аутентификации на основе токенов для моего Rails API. Этот камень создает модель User с некоторыми атрибутами. После добавления некоторых пользовательских атрибутов в мою модель User, маршруты управления пользователями (вход в систему, выход из системы ...), предоставляемые devise_token_auth, продолжают показывать одинаковые старые атрибуты.Ruby On Rails - переопределить методы рендеринга в devise_token_auth

Я попытался добавить UserSerializer, но это не решило проблему.

Кто-нибудь знает, как визуализировать пользовательские данные для модели пользователя, используя devise_token_auth?

--- EDIT ---

Я читал документацию гем и выяснил, что это было возможно override rendering methods, но я действительно не знаю, как.

+0

Без размещения кода ваш вопрос является слишком широким. –

+0

FYI, я не реализую контроллеры, которые обрабатывают sign_in, sign_out и sign_up. Они предоставляются devise_token_auth, добавляя «mount_devise_token_auth_for« Пользователь », по адресу:« auth »на маршрутах. –

ответ

3

Что означает документ, так это то, что можно использовать собственный контроллер, чтобы заменить основы. Регистрации/сеансы/Пароли/Контроллеры проверки токена.

Для примера предположим, что вы хотите переопределить RegistrationsController, предоставляемый DeviseTokenAuth.

Во-первых, вам нужно создать свой собственный контроллер, унаследовав от базового:

# 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' 
} 
+0

Ваш ответ хороший, пожалуйста, проверьте, что я добавил, чтобы заставить его работать. Спасибо –

0

dvxam ' s ответ и 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 
Смежные вопросы