我在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_actionDoorkeeper::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/

10-10 04:50