10

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

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'
}

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

4

1 回答 1

5

有关信息,我在这里找到了解决方案并且它有效。

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

例如,如果第二个用户是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

事实上,文档谈到了它,但我认为它不是很明确。

于 2019-10-16T17:04:00.847 回答