Ошибка неправильного ответа OmniAuth - PullRequest
2 голосов
/ 03 апреля 2011

Я использую OmniAuth с Devise, чтобы разрешить пользователям входить через Facebook или создать обычную учетную запись с именем пользователя и паролем.Когда я изначально все это настроил, я использовал отличные инструкции из Railscasts .Все работало очень хорошо в течение 2+ месяцев, но буквально на днях перестал работать логин на фейсбуке.OmniAuth отправляет вас на аутентификацию через Facebook, а затем возвращает: http://localhost:3000/auth/failure?message=invalid_response

У Google нет предложений о причинах этой ошибки или о том, как ее исправить, а в документах OmniAuth - нет.Я также пытался копаться в их коде, но единственное упоминание об этой ошибке, которое я обнаружил, это: /oa-oauth/lib/omniauth/strategies/oauth.rb:

rescue ::MultiJson::DecodeError => e
  fail!(:invalid_response, e)
end

Кто-нибудь когда-нибудь видел эту ошибку !?Знаете что это или как это исправить ?!Это мешает мне запускать это приложение, поэтому любая помощь будет очень признательна!

Спасибо, JG

Ответы [ 5 ]

3 голосов
/ 02 мая 2011

Я столкнулся с этой ошибкой в ​​той же ситуации.Devise спасает несвязанное исключение и обрабатывает его как ошибку аутентификации.Я выгрузил Devise, обработав исключение в контроллере:

<code>  # authentications_controller.rb
  def create
    omniauth = request.env["omniauth.auth"]
    # Blah
    # blah
    # Blark!
  rescue Exception => e
    # Just spit out the error message and a backtrace.
    render :text => "<html><body><pre>" + e.to_s + "
" + e.backtrace.join("\n") + "
"
2 голосов
/ 07 апреля 2011

Для всех, кто находит это через Google, heroku_backup_task был виновником для меня.Когда мы добавляем это в наш гемфайл, не удается декодировать OmniAuth, что приводит к этой ошибке.Я предполагаю, что это некоторый конфликт json.

Не уверен, почему это не происходит на 1.9.2, но я могу подтвердить, что обновление до 1.9.2 исправляет его, но может вызвать другие проблемы в вашем приложении, если все вашиДрагоценные камни не играют хорошо, и унизить героку, кажется, не ходят.Мне нужно будет уничтожить и воссоздать мое приложение теперь, когда я обнаружил проблему.

1 голос
/ 21 декабря 2011

ОК, извините, что постился на такой старый вопрос, однако, следуя этому уроку Railscasts, я получил ту же ошибку. Я пришел к выводу, что обработка ошибок в кристалле omniauth-twitter вызывает путаницу, поскольку скрывает основные ошибки. Я решил эту проблему, добавив в приложение гем omniauth-facebook и аутентифицировавшись с ним.

Это быстро выявило основную ошибку в моем приложении, которая заключалась в том, что я поместил метод User.create_with_omniauth в пользовательский контроллер, а не в модель, - ошибка новичка, но ее легко устранить.

Моя ошибка была простой и несколько неактуальной: с помощью гема facebook обработка ошибок позволила мне понять проблему и быстро ее устранить. Если вы боретесь с этой проблемой, попробуйте facebook или другого провайдера и посмотрите, сможете ли вы легче найти корень проблемы и, конечно же, избежать некоторых из более сложных проблем, таких как обновление до ruby!

1 голос
/ 21 апреля 2011

У меня была такая же проблема, и, думаю, я нашел решение. В учебном пособии RailsCast # 235 дает authentications_controller.rb

def create
  auth = request.env["rack.auth"]
  current_user.authentications.find_or_create_by_provider_and_uid(auth['provider'],
                                                                  auth['uid'])
  flash[:notice] = "Authentication successful."
  redirect_to authentications_url
end

но

auth = request.env["rack.auth"]

больше не существует в сети 0.2.3

auth = request.env["omniauth.auth"]

правильно.

1 голос
/ 04 апреля 2011

Хорошо,

Я не уверен, почему это сработало, но это так, поэтому я опубликую здесь, чтобы помочь кому-то еще, кто в конечном итоге с этой проблемой.

Я обновил свое приложение, чтобы использовать ruby ​​1.9.2 (путь будущего!) И bang, оно просто снова заработало.Не знаю почему, но эй, иногда это так.

Хотя обновление было действительно легким.Этот dhh твит вызвал меня в действие по обновлению и обнаружил, что this и this действительно полезны для того, чтобы код 1.8.7 работал в 1.90,2.Упрощение с Heroku также облегчает обновление приложения.

...