JWT 错误 TypeError:'instanceof' 的右侧不是对象
2023-01-05
5429
我尝试使用 express 和 JWT (JsonWebToken) 创建一个应用程序。它在本地运行,但当我尝试在自己家里的服务器上使用它时,它会出现错误。我花了一个小时的时间尝试寻找解决方案,但没有任何效果。
TypeError: Right-hand side of 'instanceof' is not an object
at Object.module.exports [as sign] (/home/container/node_modules/jsonwebtoken/sign.js:108:58)
at server.post (/home/container/server.js:51:9)
at Layer.handle [as handle_request] (/home/container/node_modules/express/lib/router/layer.js:95:5)
at next (/home/container/node_modules/express/lib/router/route.js:144:13)
at Route.dispatch (/home/container/node_modules/express/lib/router/route.js:114:3)
at Layer.handle [as handle_request] (/home/container/node_modules/express/lib/router/layer.js:95:5)
at /home/container/node_modules/express/lib/router/index.js:284:15
at Function.process_params (/home/container/node_modules/express/lib/router/index.js:346:12)
at next (/home/container/node_modules/express/lib/router/index.js:280:10)
at /home/container/node_modules/body-parser/lib/read.js:137:5
这真的是一个很简单的应用程序,但我找不到为什么会出现上述错误 ^^
这是我的代码:
const cors = require('cors');
const express = require('express');
const bodyParser = require('body-parser');
const server = express();
const port = 3000 || process.env.PORT;
server.options('*', cors());
server.use(bodyParser.json());
server.use(bodyParser.urlencoded({ extended: false }));
const jwt = require('jsonwebtoken');
server.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
const posts = [
{
user: 'david',
title: 'post'
},
{
user: 'bryan',
title: 'post2'
}
];
server.get('/posts', authenticateToken, (req, response) => {
response.json(posts.filter(post => post.user === req.user));
});
server.post('/login', (req, res) => {
const {username, password} = req.body;
if(username == null) return res.sendStatus(401);
jwt.sign(username, 'test', (err, token) => {
if(err) {
console.log(err);
return res.sendStatus(403);
}
console.log(accessToken);
res.json({accessToken: accessToken});
});
});
function authenticateToken(req, res, next) {
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1];
if(token == null) return res.sendStatus(401);
jwt.verify(token, 'test', (err, user) => {
if(err) return res.sendStatus(403);
req.user = user;
next();
});
}
我在任何网站上都找不到解决方案。
3个回答
我遇到了同样的问题。我发现问题出现在运行
npm audit fix
命令以消除漏洞时。
该过程更新了护照模块,这似乎是问题的原因。我回到应用修复之前的设置,一切又恢复正常了。
差异:
"passport": "~0.2.0",
"passport": "^0.6.0",
"passport-jwt": "^4.0.0",
"passport-jwt": "^4.0.1",
相当旧的节点版本:10.16.0
我希望它能有所帮助
Albert Baucells
2023-01-06
我更新了服务器上的节点版本并修复了错误。
David
2023-01-06
我遇到了同样的问题。问题是 jsonwebtoken 包的 9.0.0 版本不支持节点版本 11 及以下版本,因此我通过降级 jsonwebtoken 包的版本解决了该问题。
我通过将 package.json 文件中的 jsonwebtoken 依赖项从 9.0.0 更改为 8.5.1 来实现此目的,然后在终端中运行 npm update。
这里可能建议升级您的节点版本,但由于 npm 问题,我还没有设法更新我的节点版本,所以这只是一种解决方法。
查看以下文章,其中解释了 jsonwebtoken 包从 v8 迁移到 v9 的过程。 https://github.com/auth0/node-jsonwebtoken/wiki/Migration-Notes:-v8-to-v9
92lexus
2023-01-12