JWT 错误类型错误:'instanceof'的右侧不是对象



我试图创建一个应用程序与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();
});
}

我在任何网站上都找不到解决办法。

我也遇到了同样的问题。我在执行npm audit fix命令清除漏洞时发现出现了问题。

进程更新了护照模块,这似乎是问题的原因。我回到应用修复之前的设置,一切又正常了。

Diff:

"passport": "~0.2.0",
"passport": "^0.6.0",
"passport-jwt": "^4.0.0",
"passport-jwt": "^4.0.1",

相当旧的节点版本:10.16.0

我希望它有帮助

使用一个新的(对我来说)代码库。我经常遇到这种情况。我把所有的东西都升级到最新的,但还是有同样的错误。

$ grep jsonwebtoken package.json
"jsonwebtoken": "^9.0.0",
"@types/jsonwebtoken": "9.0.1",
$ node --version
v19.6.0

删除node_modules,运行npm install,重启npm run dev

TypeError: 'instanceof'右边不是对象

已经过去一天了,我可以真的这里需要一些帮助!

我更新了服务器上的节点版本,它修复了错误。

我也有同样的问题。问题是jsonwebtoken包的9.0.0版本不支持节点版本11及以下,所以我通过降级jsonwebtoken包的版本来解决它。

我通过将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

相关内容

最新更新