Ruby Rails 机架中间件排除

Ruby on Rails Rack middleware exclude

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

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,但他们似乎在尝试做一些不同的事情,所以这个问题的答案可能会有所不同。感谢您的帮助!

Damien Matheiu 对您 link 问题的回答绝对适合您。您只需要编写一个适当的过滤器表达式。

对于上面的例子,应该是这样的:

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

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