Nano Hash - криптовалюты, майнинг, программирование

Ошибка недопустимого ответа OmniAuth

Я использую OmniAuth с Devise, чтобы позволить пользователям входить в систему через facebook или создавать обычную учетную запись с именем пользователя и паролем. Когда я первоначально все это устанавливал, я использовал превосходные инструкции из Railscasts. Все работало очень хорошо в течение 2+ месяцев, но буквально на днях перестал работать вход в facebook. 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

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

Спасибо, Дж. Г.


  • Пробовали пересинхронизировать время на сервере? 04.04.2011
  • Не ошибка. Мы на героку, поэтому время сервера не находится под нашим контролем (и я не думаю, что это вызовет эту ошибку). 04.04.2011

Ответы:


1

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

  # 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 + "</pre><hr /><pre>" + e.backtrace.join("\n") + "</pre></body></html>"
02.05.2011

2

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

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

07.04.2011

3

Ok,

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

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

Хотя обновление было очень простым. Этот твит подтолкнул меня к обновлению, и я нашел это и это чтобы быть действительно полезным ресурсом для проверки того, что ваш код 1.8.7 будет работать в 1.9.2. Спасибо героку за то, что так легко обновить приложение.

04.04.2011
  • Мне тоже помогло обновление до ruby ​​1.9.2. 19.05.2011

  • 4

    У меня была такая же проблема, и я думаю, что нашел решение. В учебнике 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"]
    

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

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

    верно.

    21.04.2011

    5

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

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

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

    20.12.2011
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..