我想配置中间件以从基本身份验证中排除某些路径。我可以像下面这样做:
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,但似乎他们试图做一些不同的事情,所以也许这个问题的答案会有所不同。谢谢你的帮助!
答案 0 :(得分:1)
对于上面的示例,这将是:
unless env['REQUEST_PATH'].match /^\/api\/v2\/gadgets\/(\d+)\/specs$/
middleware = BasicAuth.new #... args ...
env = middleware.call(env)
end
因此,只有当路径与您排除的任何路径都不匹配时,才会调用BasicAuth中间件。