【问题标题】:Ruby On Rails - override rendering methods in devise_token_authRuby On Rails - 覆盖 devise_token_auth 中的渲染方法
【发布时间】:2016-07-23 00:40:51
【问题描述】:

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

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

有谁知道如何使用devise_token_auth 为用户模型呈现自定义数据?

--- 编辑---

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

【问题讨论】:

  • 不发布您的代码,您的问题就太宽泛了。
  • 仅供参考,我没有实现处理 sign_in、sign_out 和 sign_up 的控制器。它们由 devise_token_auth 通过在路由中添加 mount_devise_token_auth_for 'User', at: 'auth' 提供。

标签: ruby-on-rails ruby serialization devise


【解决方案1】:

文档的意思是,您可以使用自己的控制器来替换基本的注册/会话/密码/令牌验证控制器。

举例来说,假设您要覆盖 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'
}

【讨论】:

  • 您的回答很好,请检查我添加的内容以使其正常工作。谢谢:D
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 2013-06-24
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多