如何在相同的导轨应用中使用火箭裤和门卫?

时间:2012-07-08 12:21:35

标签: ruby-on-rails-3 api rest oauth-2.0

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

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

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

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

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

1 个答案:

答案 0 :(得分:6)

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

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