#python #google-oauth
#python #google-oauth
Вопрос:
Вот код:
from typing import List
from google_auth_oauthlib.flow import InstalledAppFlow
PATH_FILE_SECRETS: str = secrets.json'
SCOPES: List[str] = ['https://www.googleapis.com/auth/gmail.readonly']
LOCAL_REDIRECT_SERVER_DOMAIN='thermotest.ddns.net'
LOCAL_REDIRECT_SERVER_PORT=80
flow: InstalledAppFlow = InstalledAppFlow.from_client_secrets_file(PATH_FILE_SECRETS, SCOPES)
credentials = flow.run_local_server(LOCAL_REDIRECT_SERVER_DOMAIN, LOCAL_REDIRECT_SERVER_PORT)
Я использую google-auth-oauthlib
version 0.2.0
(последнюю версию).
И я зарегистрировал этот URL-адрес перенаправления:
http://thermotest.ddns.net:80
Проблема в том, что метод « run_local_server
» генерирует URL, который заканчивается косой чертой :
...amp;redirect_uri=http://thermotest.ddns.net:80/...
Который после декодирования выдает значение:
http://thermotest.ddns.net:80/
Таким образом, Google жалуется, что:
URI перенаправления в запросе,http://thermotest.ddns.net:80 /, не соответствует тем, которые авторизованы для клиента OAuth.
Это нормально, потому что « http://thermotest.ddns.net:80/
» не строго идентично « http://thermotest.ddns.net:80
«.
Если я изменю URL, удалив последнюю « /
» (я удаляю последнюю косую черту), тогда все в порядке.
Мой вопрос: почему « run_local_server
» систематически добавляет косую черту в конец URL-адреса перенаправления? Могу ли я указать методу не делать этого?
Комментарии:
1. можете ли вы просто добавить
http://thermotest.ddns.net:80/
в свой список URI перенаправления?2. Я пытался. Но это невозможно. Google говорит, что URL не может заканчиваться на /… Таким образом, я думаю, что в их API есть ошибка (какой бы невероятной это ни казалось).
3. Мы столкнулись с аналогичной проблемой. Пару дней спустя мы случайно попытались добавить косую черту к нашему uri, и это волшебным образом сработало. Мы не нашли способа воспроизвести проблему, но одна вещь, которую можно попробовать, — это очистить кэш браузера. В остальном это либо обращение в службу поддержки Google, либо ожидание. Смотрите также github.com/getsentry/sentry/issues/24543#issuecomment-803943873
Ответ №1:
Для всех, кто еще ищет ответ, это флаг, который можно передать, чтобы отключить автоматическое добавление завершающей косой черты
credentials = flow.run_local_server(...)
необходимо передать в него этот аргумент:
credentials = flow.run_local_server(redirect_uri_trailing_slash=False)