node.js - 登录/退出 10 次后,Google oauth2Client getToken 返回 invalid_grant, Bad Request
问题描述
我有一个 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));
}
});
太奇怪了!好像我错过了一些限制问题,但是......就是想不通!有任何想法吗?谢谢。
解决方案
Oh my god I'm soooo troll, this error is totally not caused by the Google OAuth, it's just because I forgot to close the database connection.
推荐阅读
- reactjs - 如何在不将 React 组件安装在 DOM 中的情况下截取 React 组件的屏幕截图?
- python - numpy 数组不可广播
- haskell - 使用 megaparsec 解析后的错误包
- ios - 平台政策 8.2 违反?
- python - 在python中快速检索网页html
- php - 带有 zip 验证的 php 图像验证
- amazon-web-services - Alexa 技能需要填充两个插槽,但是即使在请求中填充了两个插槽,技能仍然会单独请求它们
- sql - 创建将在新表中生成运行总计字段的 SQL
- java - Spring:创建名为“entityManagerFactory”的bean时出错,原因是:java.lang.AbstractMethodError:null
- firebase - 基于嵌套值在我的 Firebase 实时数据库规则中索引数据