oauth2client凭据refresh_token变为null

时间:2014-08-14 08:11:52

标签: google-oauth google-api-python-client oauth2client

Backgound

  1. 我使用google-api-python-client django_sample
  2. 访问了Google API
  3. 要进行离线访问,我已添加FLOW.params['access_type'] = 'offline'
  4. 存储credentials_json = credentials.to_json()。它包含refresh_token
  5. 恢复了凭据Credentials.new_from_json(credentials_json)
  6. 使用此凭据获取credentials.authorize(http)
  7. 的访问权限
  8. 工作得很完美=)
  9. 问题

    1. 我每5分钟做一次。
    2. 在每次迭代中,我都存储了凭证并打印出来。
    3. 1小时45分钟后," refresh_token"变得无效。
    4. 此时代码停止工作=(
    5. 我的问题

      1. Credentials班会自动刷新它的令牌吗?
      2. 如果没有,我应该在什么时候致电credentials.refresh(http)
      3. 谢谢!

1 个答案:

答案 0 :(得分:7)

每次访问令牌过期时,您的刷新令牌都会用于获取新的访问令牌。

Here谷歌表示访问令牌在到期时会使用刷新令牌自动刷新。

在我们的应用程序中,当令牌即将到期时,我们会调用credentials.refresh(http)

if (credentials.token_expiry - datetime.utcnow()) < timedelta(minutes=refresh_mins): credentials.refresh(httplib2.Http())

refresh_mins在我们的代码库中的默认值为15。这是因为访问令牌在60分钟后到期。我们每隔45分钟刷新一次。有关此问题的更多详细信息,请参见here