【问题标题】:How to require manual 'Admin' approval of an OAuth application when using Doorkeeper?使用 Doorkeeper 时如何要求手动“管理员”批准 OAuth 应用程序?
【发布时间】:2019-06-18 20:19:57
【问题描述】:

假设我们有Users(谁可以创建Doorkeeper::Applications)。另一方面,我们的应用程序有Admins 理想情况下需要检查创建的每个应用程序(并且可能对创建的用户进行背景检查等等)以及它的范围。他们会 #approve!#reject! 应用程序,只有当它是 approved 时,应用程序才能调用 API。

注意:据我所知,#approve!#reject!approved 不与 Doorkeeper 一起使用。它们是假设的,所以我的问题更清楚。

这是可以通过 Doorkeeper(或扩展)实现的行为吗?我认为配置文件中没有描述类似的内容。如果没有,您是否有任何关于如何做到这一点的一般步骤?

我认为这样的事情可以工作

class Api::V1::TransactionalBaseController < Api::V1::AuthableController
  before_action :doorkeeper_authorize!
  before_action :check_application_status!

  private
  def check_application_status!
    application = doorkeeper_token.application
    unless application.approved?
      raise Doorkeeper::Errors::ApplicationForbidden.new
    end
  end
end

如果这可能对 gem 的其他用户有所帮助,我愿意打开 PR 或开发扩展来实现这一点。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-5 doorkeeper


    【解决方案1】:

    rails g migration AddApprovedAtRejectedAtToOauthApplications approved_at:datetime rejected_at:datetime

    编辑文件以反映正确的表格。

    请记住,Ruby 允许您从任何地方修改类...在初始化程序(或类似的)中;来自https://github.com/doorkeeper-gem/doorkeeper/issues/153

    doorkeeper_extend_dir = File.join(Rails.root, "app", "models", "doorkeeper")
    Dir.glob("#{doorkeeper_extend_dir}/*.rb").each { |f| require(f) }
    
    # app/models/doorkeeper/application.rb
    module Doorkeeper
      class Application < ActiveRecord::Base
        def approved?
          approved_at?
        end
    
        def rejected?
          rejected_at?
        end
    
        def approve!
          update_column(:approved_at, DateTime.now)
        end  
    
        def reject!
          update_column(:rejected_at, DateTime.now)
        end
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-09
      • 1970-01-01
      • 2020-10-06
      • 2017-04-30
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      • 2011-12-01
      相关资源
      最近更新 更多