Nodejs Google Drive API

时间:2013-08-21 20:11:16

标签: node.js google-docs-api

我正在尝试了解如何为nodejs Google Drive API授权(特别是刷新令牌)。

这是来自https://github.com/google/google-api-nodejs-client的代码。

    oauth2Client.credentials = {
      access_token: 'ACCESS TOKEN HERE',
      refresh_token: 'REFRESH TOKEN HERE'
    };

    client
      .plus.people.get({ userId: 'me' })
      .withAuthClient(oauth2Client)
      .execute(callback);

一般问题: 刷新令牌实际上如何与访问令牌一起使用?

背景: 正如我所解释的那样,每个访问令牌的时间间隔都有限(约1小时)。因此,当用户FIRST连接到我的服务器(服务器提供用户身份验证机制)时,服务器将接收有限生命访问令牌和一次性刷新令牌。 1小时后,访问令牌已过期。

具体问题: 这里是关键问题。到期后,我的服务器仍然使用EXPIRED访问令牌和刷新令牌向Google Drive Api发送请求(服务器使用会话来存储这些值)。这仍然可以访问Google云端硬盘中的内容吗?我猜测的是nodejs lib + google驱动器api足够智能,可以检测到访问令牌已过期&识别刷新令牌& api盲目地用新的访问令牌替换过期的访问令牌(比如服务器不需要做任何事情;只需google drive api)。 api是否会使用新的访问代码响应服务器?

我需要解决这个问题,因为我需要有效地在Nodejs中组织我的代码。

谢谢!

1 个答案:

答案 0 :(得分:1)

Node.js API客户端将检测访问令牌错误并自动刷新令牌。

您可以看到此in the source

var hasAuthError = res.statusCode == 401 || res.statusCode == 403;
// if there is an auth error, refresh the token
// and make the request again
if (!opt_dontForceRefresh && hasAuthError && credentials.refresh_token) {
  // refresh access token and re-request
  that.refreshToken_(credentials.refresh_token, function(err, result) {
    if (err) {
      opt_callback && opt_callback(err, null, null);
    } else {
      var tokens = result;
      tokens.refresh_token = credentials.refresh_token;
      that.credentials = tokens;
      that.request(opts, opt_callback, true);
    }
  });
}