Sai*_*ish 2 ruby rack middleware ruby-on-rails ruby-on-rails-3
我正在尝试机架中间件,在单独的层中进行身份验证.问题是,所有请求都通过这一层.我不希望像css,javascript这样的资产请求通过身份验证中间件.我也不希望注销流程通过这个.
在application.rb中
Run Code Online (Sandbox Code Playgroud)config.middleware.use AuthClient::MyFilterClass
我期待着类似的东西
Run Code Online (Sandbox Code Playgroud)config.middleware.use AuthClient::MyFilterClass, :exclude => [:logout,'*/assets/*']
有没有办法从中间件中排除自定义路径/操作?
机架中间件形成一个向上和向下堆栈,如下例所示:

这意味着无论您提出何种要求,无论如何都会通过所有中间件.
所以你不能排除这样的中间件.
但你可以做的是将自己的中间件注入堆栈,这将检查请求路径并调用其他一些中间件.
像这样的东西:
class MyMiddleware
def initialize(app)
@app = app
end
def call(env)
if env['REQUEST_PATH'].match(/^\/assets\//)
middleware = AuthClient::MyFilterClass.new(@app)
env = middleware.call(env)
end
@app.call(env)
end
end
Run Code Online (Sandbox Code Playgroud)
这将AuthClient::MyFilterClass根据请求路径调用中间件.