【发布时间】:2015-05-23 03:28:35
【问题描述】:
我正在使用谷歌提供的 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
【问题讨论】:
-
refresh_tokens 不会真正过期。如果您在 6 个月内不使用它,如果您向用户请求 26 个不同的 refresh_tokens,第一个将过期。假设您使用的是客户端库,一切都应该交给您。访问令牌在 60 分钟后过期。等待 60 分钟,然后测试是否有新的
-
我写了一个 Rails 应用程序,我尝试按照您的要求进行操作,即访问令牌的即时刷新。代码很糟糕,我无法在不破坏它的情况下重构它。最后,我只是连接了一个非常简单的 cronjob,它每小时刷新一次访问令牌,无论如何,不检查,什么都没有。像魅力一样工作。如果条件刷新对您不起作用,请考虑一下。
标签: python google-oauth access-token