我在使用Doorkeeper :: TokensController时遇到了麻烦
我想在请求访问令牌之前执行一些代码(如果它是否已创建,我想以任何方式记录它)使用before_action
(默认路由为POST /oauth/token
/ {{ 1}}。
我按照文档here执行以下操作:
config / routes.rb
Doorkeeper::TokensController#create
应用/控制器/ access_tokens_controller.rb
use_doorkeeper do
controllers tokens: 'oauth/access_tokens'
end
但是当我class Oauth::AccessTokensController < Doorkeeper::TokensController
before_action :log_auth, only: [:create]
def log_auth
puts "I want to log here"
end
end
时,我收到以下错误消息:
ActionController :: RoutingError(未定义的方法&#39; before_action&#39;对于Oauth :: AccessTokensController:Class):
app / controllers / oauth / access_tokens_controller.rb:2:in&#39; class:AccessTokensController&#39;
app / controllers / oauth / access_tokens_controller.rb:1:in&#39; top(必填)&#39;
我做错了什么?有没有办法在POST /oauth/token
上触发before_action
或等价物?
答案 0 :(得分:4)
我找到了答案,在这里张贴以防万一有人需要它:
1 - 门卫
首先,门卫是建立在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回答)