【问题标题】:oauth2client Credentials refresh_token becomes nulloauth2client Credentials refresh_token 变为 null
【发布时间】:2014-08-14 08:11:51
【问题描述】:

背景

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

问题

  1. 我每 5 分钟做一次。
  2. 在每次迭代中,我都会存储凭据并打印出来。
  3. 1 小时 45 分钟后,“refresh_token”变为空。
  4. 此时代码停止工作 =(

我的问题

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

    Heregoogle 表示访问令牌过期时使用刷新令牌自动刷新。

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

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

    refresh_mins 在我们的代码库中默认值为 15。这是因为访问令牌在 60 分钟后过期。我们每 45 分钟刷新一次。更多详情请见here

    【讨论】:

    • Google 说“默认情况下,我们的客户端库会自动刷新过期的访问令牌”是什么意思。 ?刷新方法应该手动调用,不是吗?
    • 不,我认为它是由库自动为您调用的
    • 那么刷新令牌呢?它们会过期吗?
    猜你喜欢
    • 2016-12-07
    • 2016-01-21
    • 2017-07-18
    • 2018-08-18
    • 2016-06-10
    • 2021-08-17
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多