具有多个模型和auth标头的devise_token_auth

时间:2016-04-08 17:35:40

标签: ruby-on-rails access-token

这是我的问题,我覆盖用户模型的控制器:

mount_devise_token_auth_for 'User', at: 'auth', controllers: {
     registrations:      'v1/authentication/registrations'
     sessions:           'v1/authentication/sessions'
     token_validations:  'v1/authentication/token_validations'
 }

这项工作很好,没有问题。但是,当我使用相同的控制器添加新模型时:

mount_devise_token_auth_for 'Admin', 'admin_auth', controllers: {
   sessions:           'v1/authentication/sessions',
   token_validations:  'v1/authentication/token_validations'
}
mount_devise_token_auth_for 'User', at: 'auth', controllers: {
   registrations:      'v1/authentication/registrations',
   sessions:           'v1/authentication/sessions',
   token_validations:  'v1/authentication/token_validations'
}

他们的Admin模型的响应头没有auth键。响应正常(200)但不返回auth标头。但是,如果删除Admin模型的控制器部分(覆盖),则响应将返回auth密钥。顺便说一下,覆盖只改变控制器的渲染方法。任何人都可以帮忙找到解决这个问题的方法吗?

1 个答案:

答案 0 :(得分:0)

有关信息,我找到了解决方案here,它可以工作。

我们需要为第二个模型覆盖devise令牌身份验证控制器,并确定成功响应的范围。

例如,如果第二个用户是Customer

#routes.rb
mount_devise_token_auth_for 'Customer', at: 'customer_auth', controllers: {
  sessions: 'api/v1/customer_auth/sessions',
  registrations: 'api/v1/customer_auth/registrations'
}
# controllers
class Api::V1::CustomerAuth::SessionsController < DeviseTokenAuth::SessionsController
  protected

  def render_create_success
    render json: {
      data: resource_data(resource_json: @resource.token_validation_response)
    }, scope: current_customer
  end
end

class Api::V1::Sps::CustomerAuth::RegistrationsController < DeviseTokenAuth::RegistrationsController
  protected

  def render_create_success
    render json: {
      status: 'success',
      data: resource_data
    }, scope: current_customer
  end
end

实际上documentation谈到了它,但是我认为它不是很明确。