Как предоставить доступ постоянно с 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. Вы можете сделать это несколько раз, если вам нужно (или несколько недель спустя...)
Вы сохранили учетные данные в хранилище после успешного получения учетных данных?