Omniauth 404 при обратном вызове

#ruby-on-rails #omniauth

#ruby-on-rails #omniauth

Вопрос:

Я пытаюсь интегрировать omniauth со своим приложением, поскольку ранее я успешно и с удовольствием использовал его в приложении Rails 3.

К сожалению, приложение, над которым я работаю, — Rails 2.3.14. Когда я использую omniauth, все идет хорошо, пока обратный вызов не вернется в мое приложение — в журналах не отображается ошибка, появляется просто случайное сообщение 404. Мои маршруты следующие:

 map.connect '/auth/:provider', :controller => 'user_identities', :action => 'blank' 
map.callback "/auth/:provider/callback", :controller => "user_identities", :action => "create"
map.failure "/auth/failure", :controller => "user_identities", :action => "fail"
  

Пустое действие в первой строке — это обходной путь для ошибки, в которой говорится, что метод не получает ‘auth /:provider’, который он никогда не загружает, поскольку он перенаправляет facebook через Omniauth в любом случае.

Вот мои журналы ошибок

Обработка UserIdentitiesController#create (для 127.0.0.1 в 2011-10-08 22:36:26) [ПОЛУЧИТЬ] Параметры: {«code»=> «12345», «action»=>»create», «controller»=>»user_identities», «provider»=>»facebook»} Рендеринг /Users/hash/myapp/public/404.html (404)

Добавление отладчика или puts в первую строку create также не помогает

Есть идеи?

Спасибо

Ответ №1:

У меня только что была эта проблема, когда я получал страницу 404 в запросе / auth / twitter / callback, возвращающемся из Twitter.

Проблема заключалась в том, что у меня возникла ошибка приложения в контроллере. Это привело к 404 (не уверен, почему), а не к 500.

Ответ №2:

Обратите внимание, что он пытается выполнить рендеринг #create по запросу GET. Действия создания могут принимать только запросы POST. Не видя больше вашего кода, я не знаю, как исправить этот конкретный случай, но это проблема. Возможно, вам просто нужно добавить :method => :post в свою форму.

Комментарии:

1. Ну, даже если бы я добавил post, это было бы в /auth/:provider, то есть в пустой метод. Обратный вызов, возвращаемый facebook, является GET, потому что именно так это делает omniauth … есть ли какой-либо способ изменить это?