我在Doorkeeper :: TokensController上遇到了麻烦。
我想使用before_action
(默认路由为POST /oauth/token
/ Doorkeeper::TokensController#create
)在请求访问令牌之前执行一些代码(无论是否创建,无论如何我都要记录它)。
我通过执行以下操作来遵循文档here:
config / routes.rb
use_doorkeeper do
controllers tokens: 'oauth/access_tokens'
end
app / controllers / 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:Class的未定义方法'before_action'):
app / controllers / oauth / access_tokens_controller.rb:2:在'class:AccessTokensController'中
app / controllers / oauth / access_tokens_controller.rb:1:在“顶部(必需)”中
我究竟做错了什么?有没有办法触发
before_action
或Doorkeeper::TokensController
上的等效项? 最佳答案
我找到了答案,将其发布在这里,以防万一有人需要它:
1-门卫
首先,Doorkeeper建立在ActionController::Metal
上(请参见here)。这意味着它不具备可以从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
(感谢this回答)
关于ruby-on-rails - 如何在Doorkeeper::TokenController上使用before_action,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42138227/