如何在 Doorkeeper::TokenController 上使用 before_action

Fra*_*ois 3 ruby-on-rails oauth doorkeeper

我在使用 Doorkeeper::TokensController 时遇到了问题。
我想在请求访问令牌之前执行一些代码(如果它已创建与否,无论如何我都想记录它)使用before_action(默认路由是POST /oauth/token/ Doorkeeper::TokensController#create

我通过执行以下操作来遵循此处的文档:

配置/路由.rb

  use_doorkeeper do
    controllers tokens: 'oauth/access_tokens'
  end
Run Code Online (Sandbox Code Playgroud)

应用程序/控制器/access_tokens_controller.rb

class Oauth::AccessTokensController < Doorkeeper::TokensController
  before_action :log_auth, only: [:create]

  def log_auth
    puts "I want to log here"
  end
end
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时POST /oauth/token,我收到以下错误消息:

ActionController::RoutingError(Oauth::AccessTokensController:Class 的未定义方法“before_action”):
app/controllers/oauth/access_tokens_controller.rb:2:in 'class:AccessTokensController'
app/controllers/oauth/access_tokens_controller.rb:1:in '顶部(必填)'

我究竟做错了什么?有没有办法触发 abefore_action或等效项Doorkeeper::TokensController

Fra*_*ois 6

我找到了答案,贴在这里以防万一有人需要它:

1 - Doorkeeper
首先,Doorkeeper 建立在ActionController::Metal(见这里)。这意味着它没有提供您可以在继承自的“经典”控制器中使用的所有功能ActionController::Base

2 - 添加功能
为了向我的AccessTokensController我添加一些功能,我必须包括AbstractController::Callbacks这样的:

class Oauth::AccessTokensController < Doorkeeper::TokensController
  include AbstractController::Callbacks
  before_action :log_auth, only: [:create]

  def log_auth
    puts "I want to log here"
  end
end
Run Code Online (Sandbox Code Playgroud)

(感谢这个答案)