Google Token 已过期或被撤销

时间:2021-07-15 05:34:19

标签: javascript node.js express google-api dialogflow-es

我正在尝试实施一个应用程序,该应用程序会提醒用户即将进行的 Google 日历活动。我已经成功创建了 google OAuth 令牌并且我的应用程序运行良好。但突然间我收到此错误“错误:'invalid_grant',error_description:'令牌已过期或撤销。'”。 这是我的代码:

const TOKEN_PATH = 'token.json';

const OAuth2 = google.auth.OAuth2;

const googleConfig = {
  clientId: 'xxxxxxxxxxx', 
  clientSecret: 'xxxxxxxxxxxxxxxx', 
  redirect: 'xxxxxxxxxxxxxxx/landingPage' 
};

function createConnection() {
  return new OAuth2(
    googleConfig.clientId,
    googleConfig.clientSecret,
    googleConfig.redirect
  );
}

const defaultScope = [
   'https://www.googleapis.com/auth/calendar.readonly'
];

function getConnectionUrl(auth) {

  return auth.generateAuthUrl({
    access_type: 'offline',
    prompt: 'consent', // access type and approval prompt will force a new refresh token to be made each time signs in
    scope: defaultScope

  });
}

function urlGoogle() {
  const auth = createConnection(); // this is from previous step
  const url = getConnectionUrl(auth);
  return url;
}

app.get('/', function (req, res) {
    const url = urlGoogle()
    return res.render("index", { loginLink: url });
});

 app.get('/landingPage', (req, res) => {
    const OAuth = createConnection()
    function getNewToken(OAuth) {
      OAuth.getToken(req.query.code, (err, token) => {
        if (err) return console.error('Error retrieving access token', err);
        OAuth.setCredentials(token);
        fs.writeFile(TOKEN_PATH, JSON.stringify(token), (err) => {
          if (err) return console.error(err);
          console.log('Token stored to', TOKEN_PATH);
          callHFunction(OAuth)
        });
      });
      }
      // Check if we have previously stored a token.
    fs.readFile(TOKEN_PATH, (err, token) => {
      if (err) return getNewToken(OAuth);
      OAuth.setCredentials(JSON.parse(token));
      console.log(OAuth.credentials)
      callHFunction(OAuth)
    });
    res.sendFile(path.join(__dirname, "./landingPage.html"));
  });

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

最常见的原因

<块引用>

错误:'invalid_grant'

  • 用户撤销了您的访问权限。
  • 您已达到未完成刷新令牌的最大数量 (50),请确保始终存储最新的。
  • 您的应用仍处于测试阶段。刷新令牌会在 7 到 14 天后过期。

如果您收到此错误,最好通过提示用户再次授权您的应用程序来确保您的应用程序可以处理它。