Ruby on Rails Rack中间件排除

时间:2015-05-04 17:59:31

标签: ruby-on-rails rack

我想配置中间件以从基本身份验证中排除某些路径。我可以像下面这样做:

config.middleware.insert_after(::Rack::Lock, "AuthenticateExcluding", realm: "Staging", exclude: ["/webhooks/stripe", "/api/v2/gadgets"]) do |u, p|

但是,我想排除所有匹配特定模式的路由,例如/api/v2/gadgets/:gadget_id/specs(人为举例)。这可能吗?

我发现了一个类似的问题here,但似乎他们试图做一些不同的事情,所以也许这个问题的答案会有所不同。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

Damien Matheiu对你所链接问题的回答绝对适合你。您只需要编写适当的过滤器表达式。

对于上面的示例,这将是:

unless env['REQUEST_PATH'].match /^\/api\/v2\/gadgets\/(\d+)\/specs$/
  middleware = BasicAuth.new #... args ...
  env = middleware.call(env)
end

因此,只有当路径与您排除的任何路径都不匹配时,才会调用BasicAuth中间件。