У меня есть сайт, который настроен для работы с несколькими 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"}
оШИБКА - 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" }
См. Этот ответ: http://stackoverflow.com/a/33345373/981341 – DustinFisher
Знаете ли вы, что что-то изменится, что повлияет на несколько поставщиков, поскольку у меня такая же проблема у нескольких поставщиков? –
Кстати, спасибо за быстрый ответ! –