如何刷新存储的Google oAuth凭据

Bos*_*OSX 2 python access-token google-oauth

我正在使用谷歌提供的Python API.我想要做的只是确保访问令牌不会过期.我将refresh_token存储在凭证文件中.我只是不确定如何在调用API之前"检查"令牌仍然是好的,如果需要刷新它并将其重新存储在凭证文件中.

我做了一个测试,即使我从凭证文件中删除了使用刷新令牌将其重写为凭证的访问令牌.我希望这也适用于过期的访问令牌.

谢谢

storage = Storage('cred_storage.txt')

credentials = storage.get()

if not credentials:
    flow = OAuth2WebServerFlow(CLIENT_ID, CLIENT_SECRET, OAUTH_SCOPE, REDIRECT_URI)
    authorize_url = flow.step1_get_authorize_url()
    print 'Go to the following link in your browser: ' + authorize_url
    code = raw_input('Enter verification code: ').strip()
    credentials = flow.step2_exchange(code)
    storage.put(credentials)


http = httplib2.Http()
http = credentials.authorize(http)
print http
service = build('admin', 'reports_v1', http=http)
print service
data_query = service.customerUsageReports().get(**{'date':'2015-01-07'})
feed = data_query.execute()
print feed
Run Code Online (Sandbox Code Playgroud)

Pet*_*ann 7

只需检查过期访问令牌的情况,并刷新过期的访问令牌,如下所示:

if credentials.access_token_expired:
    credentials.refresh(httplib2.Http())
Run Code Online (Sandbox Code Playgroud)

提示:在开发此内容时,您可以通过在凭据文本文件中编辑访问令牌到期日期并强制它超过一小时来进行测试

此外,在您检查的行的代码中if not credentials:,您可以更好地处理该情况:

if credentials is None or credentials.invalid:
Run Code Online (Sandbox Code Playgroud)


Nah*_*ela 5

我在使用 from_authorized_user_info. 不幸的是,以下代码对我不起作用:

credentials.refresh(httplib2.Http())
Run Code Online (Sandbox Code Playgroud)

但是我从 Oauth 库中找到了这个文档,效果很好。分享如下:

import google.auth.transport.requests
import requests

request = google.auth.transport.requests.Request()
credentials.refresh(request)
Run Code Online (Sandbox Code Playgroud)