这是我的问题,我覆盖用户模型的控制器:
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密钥。顺便说一下,覆盖只改变控制器的渲染方法。任何人都可以帮忙找到解决这个问题的方法吗?
答案 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谈到了它,但是我认为它不是很明确。