我在使用 Doorkeeper::TokensController 时遇到问题。
我想在请求访问令牌之前执行一些代码(无论是否创建,我都想记录它)使用before_action
(默认路由是POST /oauth/token
/ Doorkeeper::TokensController#create
.
我跟着医生here https://github.com/doorkeeper-gem/doorkeeper/wiki/Customizing-routes#changing-controllers通过执行以下操作:
配置/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:Class 的未定义方法“before_action”):
应用程序/控制器/oauth/access_tokens_controller.rb:2:在“类:AccessTokensController”中
app/controllers/oauth/access_tokens_controller.rb:1:in '顶部(必需)'
我究竟做错了什么?有没有办法触发before_action
或同等水平Doorkeeper::TokensController
?
我找到了答案,将其发布在这里以防万一有人需要它:
1 - 门卫
首先,Doorkeeper 构建于ActionController::Metal
(see here https://github.com/doorkeeper-gem/doorkeeper/blob/master/app/controllers/doorkeeper/application_metal_controller.rb)。这意味着它不具备您可以在继承自的“经典”控制器中使用的所有功能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 https://stackoverflow.com/a/18189580/5353193回答)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)