Почему OmniAuth передает запросы на следующее промежуточное ПО? - PullRequest
1 голос
/ 08 февраля 2011

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 голосов
/ 12 октября 2011

В Rails 3.1.1 у меня такая проблема.

Если в вашем приложении есть маршрут, который отвечает на auth/:provider_name и не возвращает ошибку 404, он будет использоваться вместо следующего потока omniauth.

Чтобы решить, вам нужно удалить его или заставить вернуть ответ с 404 статусом

0 голосов
/ 25 марта 2011

если вы не хотите, чтобы OmniAuth передавал следующее промежуточное ПО, вам просто нужно изменить порядок промежуточного ПО.Пример

Middleware_1 Middleware_2 ... OmniAuth Your_APP

и все будет работать:)

...