在 config/initializers/doorkeeper.rb 中根据 resource_owner_authenticator 中的不同条件引发自定义错误

raise custom error based on different conditions in resource_owner_authenticator in config/initializers/doorkeeper.rb

我想引发自定义错误并根据不同的条件自定义错误响应。 对于身份验证,我有一些用户未通过身份验证的条件,例如, 不是活跃用户,用户资料不完整等等

我遵循了这个,#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

如果有人有任何线索,请提供帮助。

您可能已经找到了答案,如果您还没有的话:

将此添加到您使用 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 将是返回的错误。

在阅读 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."
 }