如何在Doorkeeper :: TokenController上使用before_action

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

我通过以下方式跟踪了这里的文档:

配置/ routes.rb中

  use_doorkeeper do controllers tokens: 'oauth/access_tokens' end 

应用程序/控制器/ 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 

但是当我执行POST /oauth/token ,我有以下错误消息:

ActionController :: RoutingError(Oauth :: AccessTokensController的未定义方法’before_action’:Class):
app / controllers / oauth / access_tokens_controller.rb:2:在’class:AccessTokensController’中
app / controllers / oauth / access_tokens_controller.rb:1:in’top(required)’

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

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

1 – 门卫
首先,Doorkeeper是基于ActionController::Metal构建的(见这里 )。 这意味着它没有提供可以在inheritance自ActionController::Base的“经典”控制器中使用的所有function

2 – 添加function
为了向我的AccessTokensController添加一些function,我必须包含这样的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 

(感谢这个答案)