Google OAuth 2 redirect_uri_mismatch - приложение OmniAuth Rails

У меня проблема с аутентификацией учетной записи Google в моем приложении Rails. Я использую omniauth-google-oauth2 gem с помощью Devise. Всегда получайте эту ошибку, когда я пытаюсь получить доступ к учетной записи google:

Error: redirect_uri_mismatch
The redirect URI in the request: http://localhost:3000/users/auth/google_oauth2/callback did not match a registered redirect URI

Я уверен, что зарегистрированный URL-адрес перенаправления в моем приложении консоли Google правильный и идентичный запрошенному, так же:

enter image description here

Итак, какая главная проблема здесь?

Ответ 1

попробуйте следующим образом:

add require "omniauth-google-oauth2" to devise.rb in config/initializers folder

add http://localhost:3000/users/auth/google_oauth2/callback в URL-адрес переадресации в консоли Google API https://console.developers.google.com

перезапустить сервер

Ответ 2

Мое решение состоит в том, чтобы принудительно перенаправить redirect_url на обе стадии (код/​​токен), devise.rb initializer:

CALLBACK_URL = 'https://SOMESERVER/users/auth/google_oauth2/callback'

Devise.setup do |config|
  config.omniauth :google_oauth2,
    "SOMECLIENTID.apps.googleusercontent.com",
    "SOMEKEY",
    {
    :client_options => {:ssl => {:ca_file => 'C:\Ruby21\cacert.pem'}},
    :provider_ignores_state => true,
    :prompt => "select_account",
    :redirect_uri => CALLBACK_URL,
    setup: (lambda do |env|
      request = Rack::Request.new(env)
      env['omniauth.strategy'].options['token_params'] = {:redirect_uri => CALLBACK_URL}
    end)
    }
end

здесь обсуждается проблема: https://github.com/zquestz/omniauth-google-oauth2/issues/181

Ответ 3

Будьте осторожны с тем, какой идентификатор клиента вы устанавливаете.
Google API предоставляет два:
Идентификатор клиента для Google Compute и App Engine
Идентификатор клиента для веб-приложений

Вам нужно использовать идентификатор клиента для веб-приложений

Ответ 4

Убедитесь, что вы установили имя продукта и адрес электронной почты через ссылку "Согласие".

В документации omniauth-google-oauth2 вам необходимо:

Перейдите к 'https://console.developers.google.com' Выберите свой проект. Нажмите "API и auth" Убедитесь, что включены "API-интерфейс" Контакты "и" Google+ API ". Перейдите на экран "Согласие" и укажите "ИМЯ ПРОДУКТА" Подождите 10 минут, чтобы изменения вступили в силу.

У меня была одна и та же проблема, я сделал обновления, ждал 10 минут, все равно ничего, пошел на обед, потом начал работать. Угадайте, что терпение было частью ключа к успеху на этом.