Как предоставить доступ постоянно с OAuth2

Я пытался использовать OAuth2 для создания службы настройки группы со следующим:

def groupSettingsService(request):
    CLIENT_SECRETS = os.path.join(os.path.dirname(__file__), 'client_secrets.json')
    FLOW = client.flow_from_clientsecrets(CLIENT_SECRETS, scope=['https://www.googleapis.com/auth/apps.groups.settings'], message=tools.message_if_missing(CLIENT_SECRETS))
    storage = Storage('groups-settings.dat')
    credentials = storage.get()
    if credentials is None or credentials.invalid:
        credentials = run(FLOW, storage)
    http = httplib2.Http()
    http = credentials.authorize(http)
    return discovery.build('groupssettings', 'v1', http=http)

Но проблема в том, что токен больше не действует (истекает), он перенаправляет на страницу, чтобы сказать пользователю снова предоставить доступ к этой области... вещи, которые не подходят для вызовов API!

Есть ли способ работы с именем пользователя / паролем или client_secret для постоянного предоставления полного доступа к API без запроса разрешения или нет?

2 ответа

Решение

Вам нужно запросить access_type=offline, когда вы перенаправляете пользователя в Google.

Затем вы получите код, который можно обменять (посредством POSTing с помощью client_id и client_secret) на access_token (то есть тот, который вы уже используете) и refresh_token.

Когда срок действия вашего access_token истекает, вы можете отправить POST на refresh_token, client_id и client_secret, чтобы получить еще один access_token. Вы можете сделать это несколько раз, если вам нужно (или несколько недель спустя...)

Вы сохранили учетные данные в хранилище после успешного получения учетных данных?

Другие вопросы по тегам