2015-01-24 3 views
1

Я пытаюсь получить события определенного диапазона дат в календарях Google. Я делаю ниже:API Календаря Google, когда access_token недействителен

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(), я получаю ошибку ниже:

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

При использовании контрольных точек, он никогда не говорит access_token_expired в моем если утверждение. Как это может случиться так часто? Есть ли что-то, что я делаю неправильно здесь для обновления токенов?

Я прочитал ниже относительно этого: Протестируйте

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

Google access token expiration time

+0

Как вы это исправили? Я использую тот же метод, и я не могу обновить токен ... Я был бы очень признателен за любые рекомендации. Я использую AccessTokenCredentials с уже полученным токеном (с согласия пользователя вручную) У меня есть оба токена, но я не могу обновить токен токена! – xavier

+0

Моя проблема заключалась в том, что я не правильно хранил данные для токена. Я сохраняю 'credentials.to_json()' в моей базе данных. – KVISH

+0

Вы смогли это исправить? Если «Да», то как? – user2436428

ответ

0

для 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 
Смежные вопросы