# #flask #google-cloud-platform #google-oauth #google-authentication #redirect-uri-mismatch
Вопрос:
У меня есть веб-приложение Flask, которое размещено в Google Cloud Run, которое размещено с https://mydomain.run.app .
Теперь я пытаюсь добавить к нему аутентификацию Google. Я создал API под учетными данными в GCP. Я дал https://mydomain.run.app/authorize в uri перенаправления, но когда я попытался войти в систему из своего приложения, он выдает мне ошибку несоответствия перенаправления. И ошибка показывает мне http://mydomain.run.app/authorize . Несоответствие — это https и http, когда я попытался указать http в uri учетных данных, который меня выдает
Invalid Redirect: This app has a publishing status of "In production". URI must use https:// as the scheme.
@app.route('/login/google')
def google_login():
google = oauth.create_client('google')
redirect_uri = url_for('authorize', _external=True,_scheme='https')
return google.authorize_redirect(redirect_uri)
@app.route('/authorize')
def authorize():
google = oauth.create_client('google')
token = google.authorize_access_token()
resp = google.get('userinfo')
user_info = resp.json()
user = oauth.google.userinfo()
session['profile'] = user_info
session.permanent = True
return redirect('/select')
Комментарии:
1. Ваш код указывает схему http при вызове конечной точки аутентификации Google.
2. Любая ссылка или пример для схемы https, которую вы можете предложить?
3. Какую ссылку вы ищете? Ваш код создает проблему.
4. Я добавил свой код выше в свой пост. Я не мог понять, где я допускаю ошибку. Я новичок в этом. Спасибо!
Ответ №1:
При авторизованном перенаправлении URI
Вы должны ввести еще 1 URI :
https://mydomain.run.app/
Затем проверьте еще раз. У меня была такая же проблема раньше.
Комментарии:
1. Спасибо! Но не повезло. Тем не менее, он показывает ту же ошибку несоответствия URI перенаправления с http-ссылкой. Есть идеи, что может быть не так?
2. ах, пожалуйста, проверьте свое приложение при возврате., оно должно быть возвращено с помощью https
3. приложение должно работать по протоколу https только при предоставлении
4. Я пытался добавить _scheme=’https’ в url_for при перенаправлении, но теперь я authlib.integrations.base_client.errors.MismatchingStateError: mismatching_state: CSRF Предупреждение! Состояние не равно в запросе и ответе. ошибка. Я изменил свой секретный ключ на статическую строку вместо случайных чисел. Но та же ошибка.
Ответ №2:
в настоящее время ваше приложение настроено на производство в консоли разработчика Google.
Это означает, что все URI перенаправления, которые вы пытаетесь добавить в свой проект. Должен быть HTTPS, а не HTTP, вы также не можете использовать localhost
Поскольку вы пытаетесь использовать http://mydomain.run.app/authorize вам нужно изменить его так, чтобы он был https://mydomain.run.app/authorize обратите внимание, что первый из них был http://
и не https://
Ошибка возникает из-за того, что само ваше приложение пытается отправить uri перенаправления http, а не https. Вам нужно исправить ваше приложение, чтобы оно использовало https.
Комментарии:
1. Я пытался добавить _scheme=’https’ в url_for при перенаправлении, но теперь я authlib.integrations.base_client.errors.MismatchingStateError: mismatching_state: CSRF Предупреждение! Состояние не равно в запросе и ответе. ошибка. Я изменил свой секретный ключ на статическую строку вместо случайных чисел. Но та же ошибка.