2

我正在为我的应用程序创建一个 JSON API。我想为 JSON API 和门卫使用 Rocket_pants 来提供 OAuth2 支持。

我的问题是,一旦我将控制器更改为扩展火箭裤控制器,门卫方法似乎不再可用。

因此,一旦我将控制器的声明更改为class Api::V1::ApiController < RocketPants::Base,我就会收到此错误:

in `<class:ApiController>': undefined method `doorkeeper_for' for Api::V1::ApiController:Class (NoMethodError)

这可能是有道理的,因为火箭裤无法了解门卫,但我想知道我应该怎么做才能让它识别门卫。

4

1 回答 1

6

如果您使用 doorkeeper 0.4.1 或更高版本,您可以将 doorkeeper 过滤器添加到您的控制器:

class MetalController < ActionController::Metal
  include AbstractController::Callbacks # you might want to skip this for rocket_pants based controller
  include ActionController::Head
  include Doorkeeper::Helpers::Filter

  doorkeeper_for :all

  def index
    self.response_body = { :ok => true }.to_json
  end
end

由于 Rocket_pants 已经包含AbstractController::Callbacks你可以跳过它,所以你的控制器看起来像:

class MetalController < RocketPants::Base
  include ActionController::Head
  include Doorkeeper::Helpers::Filter

  version 1

  doorkeeper_for :all
end

wiki 上的这个页面也可能有用:https ://github.com/applicake/doorkeeper/wiki/ActionController::Metal-with-doorkeeper

于 2012-07-08T17:27:42.560 回答