为什么OmniAuth将请求传递到下一个中​​间件?

时间:2011-02-08 19:03:45

标签: ruby-on-rails rack middleware omniauth

OmniAuth效果很好,但我注意到在Rails v2.3.6应用中使用它时将请求传递到下一个Rack中间件,即使它最终处理请求本身,并使用重定向进行响应。

代码摘录:(来自Github

if current_path == request_path && OmniAuth.config.allow....
  status, headers, body = *call_app!
  @response = Rack::Response.new(body, status, headers)
  request_phase
elsif current_path == callback_path
  callback_phase
else
  ...
end

我的应用程序在传递/auth/provider请求后,会抛出异常并返回404.用户看不到这个,但是ExceptionNotifier和日志都有。为了解决这个问题,我创建了另一个中间件,只需[200,{},[]]响应/auth/provider_name等所有路径。

为什么OmniAuth会将请求传递到中间件堆栈?

2 个答案:

答案 0 :(得分:0)

如果您不希望OmniAuth传递下一个中间件,您只需更改中间件的顺序即可。 示例

Middleware_1 Middleware_2 ... OmniAuth Your_APP

它会起作用:)

答案 1 :(得分:0)

在Rails 3.1.1中,我遇到了这样的问题。

如果您的应用中有一条路由响应auth/:provider_name而不返回404错误,则会使用该路由而不是关注omniauth流。

要解决您需要将其删除或强制以404状态返回响应