【问题标题】:raise custom error based on different conditions in resource_owner_authenticator in config/initializers/doorkeeper.rb根据 config/initializers/doorkeeper.rb 中 resource_owner_authenticator 中的不同条件引发自定义错误
【发布时间】:2015-03-05 08:58:08
【问题描述】:
我想根据不同的条件引发自定义错误并自定义错误响应。
对于身份验证,我有一些用户未通过身份验证的情况,例如,
非活跃用户、用户资料不完整等。
我遵循这个 #315 ,我配置了相同的但执行停止在它引发自定义门卫错误的行。
Doorkeeper.configure do
resource_owner_authenticator do
@user = User.find(session[:user_id]) || redirect_to(user_login_path(return_to: request.fullpath))
raise Doorkeeper::Errors::OwnError unless @user.status == 'active'
end
end
如果有人有任何线索,请帮忙。
【问题讨论】:
标签:
ruby-on-rails-4
doorkeeper
【解决方案1】:
在阅读 NEWS.md 文件之前,我遇到了同样的问题:
- [#749] Allow user to raise authorization error with custom messages.
Under `resource_owner_authenticator` block a user can
`raise Doorkeeper::Errors::DoorkeeperError.new('custom_message')`
对于密码流 POST /oauth/token:
resource_owner_from_credentials do |routes|
raise Doorkeeper::Errors::DoorkeeperError.new('custom_message')
end
给出如下响应:
{
"error": "custom_message",
"error_description": "The authorization server encountered an unexpected condition which prevented it from fulfilling the request."
}
【解决方案2】:
你可能已经找到答案了,如果你还没有:
将此添加到您使用 doorkeeper_authorize 的控制器中!
def doorkeeper_unauthorized_render_options(error: nil)
response_hash = { status: false, description: error.description, expired: false }
response_hash[:expired] = true if error.description == "The access token expired"
{ json: response_hash }
end
这里的 respnse_hash 将是返回的错误。