如何在Doorkeeper :: TokenController上使用before_action

时间:2017-02-09 13:38:35

标签: ruby-on-rails oauth doorkeeper

我在使用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或等价物?

1 个答案:

答案 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回答)