0

我正在使用 doorkeeper gem 来使用令牌来验证请求。

当我按照如下定义配置了 doorkeeper_for 时,需要令牌,这是好的和预期的:

doorkeeper_for :all

当我将 doorkeeper_for 的条件设置为我真正想要的条件时(允许对本地部署端点的请求没有令牌)

doorkeeper_for :all, :unless => lambda { request.url =~ /http:\/\/(localhost|127.0.0.1|0.0.0.0):8080/

或者,如果我将此条件设置为任意数量的垃圾条件:

doorkeeper_for :all, :if => lambda { true }

doorkeeper_for :all, :unless => lambda { true }

然后看门人允许所有请求在没有令牌的情况下通过,这是不好的并且不是预期的。

注意到我有一个require 'doorkeeper'声明,并且我在我的 API 控制器中摆弄了各种包含语句,例如include Doorkeeper::Helpers::Filter

这可能与 Doorkeeper 与 Grape 一起工作的问题有关,但再次奇怪的是,它在没有条件的情况下也能正常工作。任何有关为什么会发生这种情况的见解将不胜感激!

4

1 回答 1

0

在与 doorkeeper-gem 的主要贡献者交谈后,我们确定这与 Grape 的使用有关。此功能应该可以与基于 Rails 的控制器一起正常工作: https ://github.com/doorkeeper-gem/doorkeeper/issues/426

Grape 本身应该是一个更接近金属的 API 框架,不一定应该与 Rails 一起使用,这导致了这个问题。

最后一点,有一个专门用于集成 Grape 和 Doorkeeper gem 的 gem: https ://github.com/fuCtor/grape-doorkeeper

于 2014-07-09T21:11:26.957 回答