gpt4 book ai didi

javascript - JSONWebTokenError : JWT Malformed at index. js

转载 作者:太空宇宙 更新时间:2023-11-03 21:50:23 24 4
gpt4 key购买 nike

老实说,我对此完全迷失了。这个项目运行得非常好,我是从我上次工作的 GitHub 推送中运行这个项目的。事情是这样的。我失去了整个后端。不知道怎么回事,也不知道发生了什么。因此,当我从 GitHub 中提取数据时,我没有 JWT key 的备份。我收到“无效 token 错误”(或类似的错误)。我将整个项目放在新的服务器/数据库上,现在出现以下错误:

JsonWebTokenError: jwt malformed
at Object.module.exports [as verify] (C:\Users\glove\workspace\CharityApp\backend\node_modules\jsonwebtoken\verify.js:49:17)
at C:\Users\glove\workspace\CharityApp\backend\src\index.js:15:30
at Layer.handle [as handle_request] (C:\Users\glove\workspace\CharityApp\backend\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (C:\Users\glove\workspace\CharityApp\backend\node_modules\express\lib\router\index.js:317:13)
at C:\Users\glove\workspace\CharityApp\backend\node_modules\express\lib\router\index.js:284:7
at Function.process_params (C:\Users\glove\workspace\CharityApp\backend\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\glove\workspace\CharityApp\backend\node_modules\express\lib\router\index.js:275:10)
at cookieParser (C:\Users\glove\workspace\CharityApp\backend\node_modules\cookie-parser\index.js:71:5)
at Layer.handle [as handle_request] (C:\Users\glove\workspace\CharityApp\backend\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (C:\Users\glove\workspace\CharityApp\backend\node_modules\express\lib\router\index.js:317:13)

以及它在index.js中引用的代码块:

const jwt = require('jsonwebtoken');
const cookieParser = require('cookie-parser');
require('dotenv').config({path: 'variables.env'});
const createServer = require('./createServer');
const db = require('./db');

const server = createServer();

server.express.use(cookieParser());

// decode jwt to get user id on each request
server.express.use((req, res, next) => {
const {token} = req.cookies;
if(token) {
const {userId} = jwt.verify(token, process.env.APP_SECRET);
// put userid onto request for access
req.userId = userId;
}
next();
});

以及在涉及登录的 GraphQL 解析器中多次使用的签名代码。

const token = jwt.sign({userId: user.id}, process.env.APP_SECRET);
// set cookie with token
ctx.response.cookie("token", token, {
httpOnly: true,
maxAge
});

应用程序 key 只是从 .env 文件中提取,而 maxAge 只是 1 年 cookie 的简单常量。

这基本上是一个已完成的项目。 :/如果有人可以帮助我,我将非常感激。

最佳答案

当您更改服务器上 JWT 的 key 时,您最终将使服务器之前发布的任何现有 JWT 失效。如果 JWT 保存为 cookie,则浏览器将继续使用现在无效的 JWT 提交 cookie,直到 cookie 过期或被删除。你应该delete the cookie in question或清除所有 cookie 以解决客户端问题。

在这种情况下,你的 secret 就丢失了。不过, secret 随着时间的推移而改变并不是没有道理的。您应该确保优雅地处理无效(也许在发生这种情况时重置 cookie),以避免您的 secret 发生更改时出现不良的用户体验。作为一名用户,我可以处理返回站点并发现我已注销的情况,但是我的所有请求无缘无故失败会让我度过一段糟糕的时光。更好的是,您可以轮换您的 secret ,跟踪前一个 secret 以及当前的 secret 并检查两者,直到您确定任何旧的 cookie 都已过期。

关于javascript - JSONWebTokenError : JWT Malformed at index. js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60081428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com