Gmail API 的访问令牌过期和创建

Zep*_*hyr 4 javascript google-api node.js google-oauth google-api-nodejs-client

我一直在使用 google API 从我的 node.js 项目中的服务器发送电子邮件。我已经设置了凭据并创建了刷新令牌和访问令牌,并且已经使用相同的内容超过 6 个月了,就像这样。

oAuth2Client = new google.auth.OAuth2(client_id, client_secret, redirect_uris);
oAuth2Client.setCredentials({ refresh_token, access_token, scope, expiry_date });
gmail = google.gmail({ version: 'v1', oAuth2Client });
gmail.users.messages.send({ /* email details */ });
Run Code Online (Sandbox Code Playgroud)

expiry_date 发送的是我第一次创建令牌时收到的日期,因此该日期是过去的日期(超过 6 个月)。

我记得读过访问令牌会在一段时间后过期,但我不确定我的 access_token 何时过期或我将如何创建一个新的。我的电子邮件仍在发送,所以我有点困惑为什么它还没有停止工作。

所以我的问题本质上是

  1. 我如何知道我的 access_token 何时到期。
  2. 一旦过期,我如何创建一个新的。当我第一次设置所有这些时,我记得是在操场上进行的,但如果可以的话,我更愿意在服务器代码本身中设置 access_token 创建过程。

DaI*_*mTo 6

访问令牌在一小时后过期。知道它是否已过期的最好且唯一的方法是尝试一下,如果访问令牌已过期,API 将向您返回错误。

\n

另一方面,刷新令牌在大多数情况下不会过期。您的代码很可能在需要时正确使用刷新令牌来请求新的访问令牌。此功能已内置到 Google apis js 客户端库中,您无需考虑。

\n

刷新令牌如何过期

\n
    \n
  1. 用户可以通过他们的 Google 帐户删除您的访问权限。
  2. \n
  3. 如果访问令牌在六个月内未使用,谷歌将自动使其过期。
  4. \n
  5. 如果您向用户请求授权(显示同意屏幕),您将获得刷新令牌。如果您再次执行此操作,您将获得另一个刷新令牌\xc2\xb8,两者都可以工作。对于给定用户,您最多可以有 50 个未完成的刷新令牌,一旦达到该标记,第一个令牌就会过期。
  6. \n
  7. 几年前的一个奇怪的错误,当夏令时到来时,许多谷歌刷新令牌由于其末端的一些奇怪的错误而自动过期,此后再也没有发生过:)
  8. \n
\n