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会将请求传递到中间件堆栈?
答案 0 :(得分:0)
如果您不希望OmniAuth传递下一个中间件,您只需更改中间件的顺序即可。 示例
Middleware_1 Middleware_2 ... OmniAuth Your_APP
它会起作用:)
答案 1 :(得分:0)
在Rails 3.1.1中,我遇到了这样的问题。
如果您的应用中有一条路由响应auth/:provider_name
而不返回404错误,则会使用该路由而不是关注omniauth流。
要解决您需要将其删除或强制以404状态返回响应