登录/退出10次后,Google oauth2Client getToken返回invalid_grant,错误的请求

问题描述 投票:0回答:1

我有一个nodejs服务器,它实现了用于用户身份验证的Google OAuth2。服务器启动后,用户可以立即登录。但是,在登录/退出10次之后,oauth2Client.getToken(code)函数将开始卡住,并最终返回错误{ error: 'invalid_grant', error_description: 'Bad Request' }。重新启动服务器,登录/注销可以再工作10次。

以下是用户认证的代码。

// index.js

// Node version: Docker, node:alpine
// googleapis Version: 46.0.0

const { google } = require("googleapis");
const express = require("express");
const app = express();

const oAuth2Client = new google.auth.OAuth2(
  process.env.GOOGLE_OAUTH2_CLIENT_ID,
  process.env.GOOGLE_OAUTH2_CLIENT_SECRET,
  process.env.GOOGLE_OAUTH2_REDIRECT_URI // http://localhost:3000/signin-google
);

app.get("/signin", (req, res) => {
  const url = oAuth2Client.generateAuthUrl({
    access_type: "offline",
    scope: [
      "https://www.googleapis.com/auth/userinfo.email",
      "https://www.googleapis.com/auth/userinfo.profile",
      "openid"
    ].join(" ")
  });
  res.json({ url });
});

app.get("/signin-google", async (req, res) => {
  try {
    const { code } = req.query;
    const { tokens } = await oAuth2Client.getToken(code);
    oAuth2Client.setCredentials(tokens);
    const oauth2 = google.oauth2("v2");
    const {
      data: { email, id: google_id }
    } = await oauth2.userinfo.v2.me.get({
      auth: oAuth2Client
    });
    const myOwnToken = ...
    res.redirect(`${process.env.WEB_BASE_URL}/signin?token=${myOwnToken}`);
  } catch (error) {
    console.log(JSON.stringify(error, null, 4));
  }
});

太奇怪了!好像我错过了一些限制问题,但是...无法解决!有任何想法吗?谢谢。

node.js google-oauth2
1个回答
0
投票

哦,天哪,我太傻了,这个错误完全不是由Google OAuth引起的,这仅仅是因为我忘记了关闭数据库连接。

© www.soinside.com 2019 - 2024. All rights reserved.