API Календаря Google, если access_token недействителен

Я пытаюсь получить события для определенного диапазона дат в календарях Google. Я делаю следующее:

    credentials = AccessTokenCredentials.from_json(token_json)
    http = httplib2.Http()
    if credentials.access_token_expired:
        credentials.refresh(http)
    else:
        http = credentials.authorize(http)

    service = build(serviceName='calendar', version='v3', http=http)
    events = service.events().list(calendarId='primary', pageToken=None,
                                   timeMin=rfc3339(start_dt),
                                   timeMax=rfc3339(end_dt))
    events = events.execute()

По какой-то причине, когда я добираюсь до последней строки events = events.execute(), я получаю events = events.execute() ошибку:

AccessTokenCredentialsError: The access_token is expired or invalid and can't be refreshed.

Когда я использую точки останова, он НИКОГДА не говорит access_token_expired в моей инструкции if. Как это может случиться так часто? Есть ли что-то, что я делаю неправильно здесь для обновления токенов?

Я читал ниже об этом:

http://tools.ietf.org/html/draft-ietf-oauth-v2-22#section-4.2.2

Срок действия токена доступа Google

+1
источник поделиться
1 ответ

Попробовать тестирование для credentials.invalid?

У меня есть эта небольшая процедура, которую я использую, чтобы гарантировать, что сохраненные учетные данные всегда свежи для модульного тестирования gmail. Он может/не может быть адаптирован к вашей ситуации.

from oauth2client.client import OAuth2WebServerFlow
from oauth2client.client import flow_from_clientsecrets
from oauth2client.file import Storage
from oauth2client import tools

# the stored credentials file to use for these tests
TEST_CREDENTIALS_FILE = 'testjoe.storage'


def get_credentials():
    """Utility routine to returns credentials for testing use"""

    # Location of the credentials storage file
    storage = Storage(TEST_CREDENTIALS_FILE)

    # Start the OAuth flow to retrieve credentials
    flow = flow_from_clientsecrets('client_secret_native.json', scope='https://www.googleapis.com/auth/gmail.modify')

    # Try to retrieve credentials from storage or run the flow to generate them
    credentials = storage.get()
    if credentials is None or credentials.invalid:
        flags = tools.argparser.parse_args(args=[])
        credentials = tools.run_flow(flow, storage, flags)
    return credentials
0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос