【问题标题】:Can someone ELI5 how to properly do offline Google oauth2 with node.js?有人可以 ELI5 如何使用 node.js 正确执行离线 Google oauth2 吗?
【发布时间】:2020-01-08 14:35:23
【问题描述】:

在浏览器中,我在做:

      let { code } = await this.auth2.grantOfflineAccess();

然后我将 code 保存在我的数据库中。

然后在服务器(node.js)上,我在做:

const { tokens } = await oauth2Client.getToken(code)
oauth2Client.setCredentials(tokens)
let { data } = await googleCalendar.calendarList.list({
  auth: oauth2Client
})

第一次,tokens 有一个refresh_token。我也保存了。当我运行一次时,它工作正常。当我再次运行它时,它说令牌无效。不知何故,我必须使用refresh_token 来获取新令牌,但我不知道如何。有人可以解释一下我 5 岁吗?

谢谢

【问题讨论】:

    标签: javascript node.js oauth-2.0 google-oauth


    【解决方案1】:
    • 您已经拥有刷新令牌。
    • 您希望将 API 与由刷新令牌刷新的访问令牌一起使用。
    • 您希望使用带有 Node.js 的 googleapis 来实现此目的。

    如果我的理解是正确的,那么这个答案呢?我认为您的问题的原因是授权码只能使用一次。因此需要使用刷新令牌检索访问令牌。在这个答案中,访问令牌由刷新令牌检索。

    修改脚本:

    const refreshToken = "###";  // Please set your refresh token.
    
    if (!refreshToken) { // Please modify this if statement for your situation.
      const { tokens } = await oauth2Client.getToken(code);
      oauth2Client.setCredentials(tokens);
    } else {
      oauth2Client.credentials = { refresh_token: refreshToken };
    }
    let { data } = await googleCalendar.calendarList.list({
      auth: oauth2Client
    });
    

    注意:

    • 这个修改后的脚本假设声明了oauth2Client 和googleCalendar。
    • 使用刷新令牌时,不需要授权码。

    参考:

    如果我误解了您的问题并且这不是您想要的结果,我深表歉意。

    【讨论】:

    • 使用刷新令牌后会得到新的刷新令牌吗?
    • @Shamoon 感谢您的回复。遗憾的是,刷新令牌无法检索刷新令牌。刷新令牌用于刷新访问令牌。但是刷新的访问令牌从刷新之前发生了变化。请注意这一点。当您要检索新的刷新令牌时,请使用授权码。关于刷新令牌的到期,这个线程有用吗? stackoverflow.com/q/8953983/7108653
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 2010-09-05
    • 2012-07-09
    • 1970-01-01
    相关资源
    最近更新 更多