#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 … есть ли какой-либо способ изменить это?