2

У меня есть сайт, который настроен для работы с несколькими API Oauth2 с помощью Devise с Omniauth и работает нормально до последней недели , В настоящее время логин с Twitter и Github по-прежнему функционируют нормально; однако Facebook, LinkedIn и Google дают мне сообщение о том, что URI Redirect не соответствует. Сообщения об ошибках чтения:Oauth2 Войти в Facebook, Linkedin и Google Остановились Работа с Devise и Omniauth, но все еще работает для LinkedIn и Twitter

Facebook:

ERROR - OmniAuth: (facebook) Authentication Failure! invalid_credentials:> OAuth2 :: Ошибка: {"error": {"message": "Ошибка проверки кода подтверждения. Убедитесь, что ваш> redirect_uri идентичен тому, который вы использовали в диалоговом запросе OAuth", "type": "OAuthException", "код": 100, "fbtrace_id": "XXXXXXXXXX"}}

LinkedIn:

ОШИБКА - OmniAuth: (LinkedIn) Аутентификация провал! invalid_credentials:> OAuth2 :: Ошибка, invalid_request: отсутствие требуемых параметров, включает недопустимое значение параметра, параметр более одного раза. : Не удалось получить токен доступа: appId или перенаправление uri не соответствует коду авторизации или коду авторизации, истек срок действия {"error_description": "Отсутствующие требуемые параметры, включает недопустимое значение параметра, параметр более одного раза: Не удается получить токен доступа: appId или перенаправлять URI не соответствует код авторизации или код авторизации истек», "ошибка": "invalid_request"}

Google

оШИБКА - OmniAuth: (google_oauth2) Authentication Failure! invalid_credentials:> OAuth2 :: Ошибка, redirect_uri_mismatch: { "ошибка": "redirect_uri_mismatch" }

я пошел проанализировала запросы, которые были направлены на все три из них в Chrome Developers Console и перенаправлением URI для обратного вызова соответствует uri, который зарегистрирован в каждом API (который не изменился с момента его работы).

Проблема с обратным отслеживанием этой ошибки. Я не уверен на 100%, когда они перестали работать, когда я входил в систему напрямую или используя логин Github во время последних тестов интеграции, когда я установил новые функции. (Большой урок узнал!) Одним из значительных изменений, которые могут повлиять на это, является то, что я включил расширение Traceable для Devise, которое потребовало от меня Warden Gem. Однако я удалил конфигурацию Traceable и Warden и восстановил пользовательскую модель и файлы конфигурации в их предыдущем состоянии, и у меня возникла такая же проблема.

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

начать, ниже мой Разрабатывают Initializer с комментариями Удалены к Сократить

Devise.setup do |config| 

    config.mailer_sender = '[email protected]' + ENV['DOMAIN_NAME'] 

    config.mailer = 'Devise::Mailer' 

    require 'devise/orm/active_record' 

    config.case_insensitive_keys = [:email] 

    config.strip_whitespace_keys = [:email] 

    config.skip_session_storage = [:http_auth] 

    config.stretches = Rails.env.test? ? 1 : 10 

    config.allow_unconfirmed_access_for = 10.days 

    config.reconfirmable = true 

    config.confirmation_keys = [:email] 

    config.remember_for = 2.weeks 

    config.expire_all_remember_me_on_sign_out = true 

    config.password_length = 8..72 

    config.email_regexp = /\A[^@][email protected][^@]+\z/ 

    config.reset_password_keys = [:email] 

    config.reset_password_within = 6.hours 

    config.sign_in_after_reset_password = true 

    config.sign_out_via = :get 

    # ==> OmniAuth 
    # Add a new OmniAuth provider. Check the wiki for more information on setting 
    # up on your models and hooks. 
    # config.omniauth :github, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo' 

    require "omniauth-google-oauth2" # Added Based on Response to Another Stackoverflow Issues - Did Not Help. 

    OMNIAUTH = YAML.load(File.read(File.expand_path('../../omniauth.yml', __FILE__))).deep_symbolize_keys 

    OMNIAUTH.each_value do |provider| 
    config.omniauth provider[:reference].to_sym, ENV[provider[:key_ref]], ENV[provider[:secret_ref]], { :scope => provider[:scope] } 
    end 
end 

OmniAuth.YML файл, который загружается, выглядит так:

facebook: { reference: "facebook", 
      name: "Facebook", 
      scope: "email, public_profile, user_birthday", 
      key_ref: "FACEBOOK_KEY", 
      secret_ref: "FACEBOOK_SECRET" } 

twitter: { reference: "twitter", 
      name: "Twitter", 
      scope: "r_fullprofile, r_emailaddress", 
      key_ref: "TWITTER_KEY", 
      secret_ref: "TWITTER_SECRET" } 

linkedin: { reference: "linkedin", 
      name: "LinkedIn", 
      scope: "r_basicprofile r_emailaddress", 
      key_ref: "LINKEDIN_KEY", 
      secret_ref: "LINKEDIN_SECRET" } 

github: { reference: "github", 
      name: "GitHub", 
      scope: "user, public_repo", 
      key_ref: "GITHUB_KEY", 
      secret_ref: "GITHUB_SECRET" } 

google: { reference: "google_oauth2", 
      name: "Google", 
      scope: "email, profile", 
      key_ref: "GOOGLE_KEY", 
      secret_ref: "GOOGLE_SECRET" } 
+1

См. Этот ответ: http://stackoverflow.com/a/33345373/981341 – DustinFisher

+0

Знаете ли вы, что что-то изменится, что повлияет на несколько поставщиков, поскольку у меня такая же проблема у нескольких поставщиков? –

+0

Кстати, спасибо за быстрый ответ! –

ответ

6

У меня был точно подобный вопрос, facebook работать, LinkedIn и Google - нет.

После некоторого копания/прибегая к помощи я смог исправить мою проблему, понижая:

gem 'omniauth-oauth2', '1.3.1' 

Так что мой Gemfile выглядит следующим образом:

gem 'devise' 
gem 'koala' 
gem 'omniauth-oauth2', '1.3.1' 
gem 'omniauth-facebook' 
gem 'omniauth-google-oauth2' 
gem 'omniauth-linkedin-oauth2' 
+1

Спасибо! У меня была проблема с LinkedIn. – mikeborgh

0

Я прошел и обновил все OmniAuth Gems, как появились недавние версии, и все проблемы были решены.