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

Sul*_*aig 6 json ruby-on-rails devise

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

从devise_token auth gem成功登录后,如何在重写默认JSON响应后发送自定义JSON?

Sul*_*aig 6

我自己解决了。

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

mount_devise_token_auth_for 'User', at: 'auth', skip: [:omniauth_callbacks], controllers: { registrations: "registrations", sessions: "sessions" }
Run Code Online (Sandbox Code Playgroud)

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

class SessionsController < DeviseTokenAuth::SessionsController
  def render_create_success
    render "users/success"
  end
end
Run Code Online (Sandbox Code Playgroud)

然后,我创建了一个名为的文件,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
Run Code Online (Sandbox Code Playgroud)

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


Swa*_*gga 6

在用户模型中,创建方法" token_validation_response ".例:

def token_validation_response
  {test: 'this is custom data'}
end
Run Code Online (Sandbox Code Playgroud)

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

  def as_json(options={})
    super(options).merge({test: 'this is custom field'})
  end
Run Code Online (Sandbox Code Playgroud)