如何在devise_token_auth gem中成功登录后返回自定义JSON?

时间:2016-03-09 07:16:56

标签: ruby-on-rails json devise

我正在使用 devise_token_auth gem 创建rails API。我想要的不仅仅是这个gem在成功的sign_in之后返回的标头中的标记,还有一些与用户关联的表。

如何在devise_token auth gem成功登录后覆盖默认的JSON响应后发送自定义JSON?

2 个答案:

答案 0 :(得分:6)

在用户模型中创建方法" token_validation_response "。 例如:

def token_validation_response
  {test: 'this is custom data'}
end

或者,如果您想添加自定义字段,可以这样做:

  def as_json(options={})
    super(options).merge({test: 'this is custom field'})
  end

答案 1 :(得分:4)

我自己解决了。

首先在config/routes.rb我添加了自定义会话控制器:

mount_devise_token_auth_for 'User', at: 'auth', skip: [:omniauth_callbacks], controllers: { registrations: "registrations", sessions: "sessions" }

然后创建了一个名为app/controllers/sessions_controller.rb的文件,并添加了以下内容:

class SessionsController < DeviseTokenAuth::SessionsController
  def render_create_success
    render "users/success"
  end
end

然后我创建了一个名为app/views/users/success.json.jbuilder的文件,并添加了如下的json数据:

json.data @resource
json.groups @resource.groups do |group|
  json.id group.id
  json.name group.name
end

因此,我可以在成功登录后提供自定义JSON。