redirect_uri_mismatch с OmniAuth Google oauth2 на Heroku - PullRequest
0 голосов
/ 29 февраля 2020

Я пытаюсь настроить простое приложение Rails с OmniAuth с помощью Google Auth.

При запуске приложения на heroku я получаю следующую ошибку при попытке доступа к маршруту oauth, либо напрямую, либо через перенаправление:

redirect_uri_mismatch

Запрос информации :

access_type=offline
client_id=631910956855-pbglluk1ofb6vjmub9a0fucs8b0r5map.apps.googleusercontent.com
redirect_uri=http://stock-scrapper-rails.herokuapp.com/auth/google_oauth2/callback
response_type=code
scope=email profile
state=94be59d4d241b70c83406ce59c36e7fc8d50279c

Отлично работает локально . Я попытался использовать туннель ngrok, и он также работает.

Полный URL: https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=631910956855-pbglluk1ofb6vjmub9a0fucs8b0r5map.apps.googleusercontent.com&redirect_uri=https%3A%2F%2Fstock-scrapper-rails.herokuapp.com%2Fauth%2Fgoogle_oauth2%2Fcallback&response_type=code&scope=email+profile&state=ac4cf27b4e2b534d854136ad25a102e2c1ff772d07dc84b8

Мое приложение размещено на http://stock-scrapper-rails.herokuapp.com Вы можете go / auth / google_oauth2, чтобы увидеть ошибку самостоятельно.

Я немного искал, но не смог решить проблему. Вот что я уже пытался / делал, но не решил проблему:

  • добавил домен в авторизованные домены
  • некоторые ответы на подобные проблемы предлагали подождать, потому что иногда Google требуется некоторое время, чтобы Google обновил изменения в домене. Тем не менее, я ждал уже несколько часов, и ошибка не исчезла
  • Дважды / трижды проверил, если мои переменные окружения были правильными на Heroku
  • проверил журнал Heroku; там нет ошибок
  • настройка OmniAuth.config.full_host вручную

Маршрут обратного вызова:

get '/auth/google_oauth2/callback', to: 'auth#oauth_callback'

Я не использую devise , Кстати. В настоящее время я просто хочу, чтобы контроллер сохранял некоторые данные в сеансе:

class AuthController < ApplicationController

  def oauth_callback
    authentication_google_data = request.env['omniauth.auth'].except(:extra)
    user_email = authentication_google_data['info']['email']
    # rest ommited
  end
end

Конфигурация OmniAuth:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2, ENV['GOOGLE_CLIENT_ID'], ENV['GOOGLE_CLIENT_SECRET']
end

Соответствующие версии гемов:

  • rails ( 6.0.2.1)
  • omniauth (1.9.0)
  • omniauth-google-oauth2 (0.8.0)
  • omniauth-oauth2 (1.6.0)

Также пытался понизить omniauth-oauth до 1.3.1, потому что читал, что была версия, вызывающая похожую проблему, но безуспешно.

Любые другие идеи о том, что я мог бы попробовать, были бы очень полезно:)

1 Ответ

0 голосов
/ 04 марта 2020

Я понял, в чем проблема. На консоли разработчика Google для моего приложения, в идентификаторах клиентов OAuth 2.0, я создал идентификатор с типом «Другое» вместо «Веб-приложение».

Создание нового на https://console.cloud.google.com/apis/credentials?project=myproject с типом "Веб-приложение" и добавление URL-адреса обратного вызова (как http, так и https) к Авторизованные URI перенаправления решили проблема.

enter image description here

...