«InstalledAppFlow.run_local_server()» систематически добавляет косую черту в конец URL-адреса перенаправления

#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)