【问题标题】:JWT ERROR TypeError: Right-hand side of 'instanceof' is not an objectJWT 错误 TypeError:\'instanceof\' 的右侧不是对象
【发布时间】:2023-02-14 06:30:43
【问题描述】:

我正在尝试使用 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();
    });
}


我在任何网站上都找不到解决方案。

【问题讨论】:

  • 哪一行是抛出错误的那一行?
  • 您在本地与服务器上的 Node.js 版本是什么?
  • jwt.sign(username, 'test', (err, token) => { if(err) { console.log(err); return res.sendStatus(403); } console.log(accessToken); res.json( {accessToken: accessToken}); });这是导致错误的行。
  • 哇,我太笨了,我在服务器上使用的是旧版本的节点。感谢您的反应

标签: node.js express jwt


【解决方案1】:

我有同样的问题。我发现问题出现在运行npm audit fix 命令以消除漏洞时。

该过程更新了护照模块,这似乎是问题的原因。在应用修复程序之前我回到了设置,一切都再次正常工作。

差异:

"passport": "~0.2.0",
"passport": "^0.6.0",

"passport-jwt": "^4.0.0",
"passport-jwt": "^4.0.1",

相当旧的节点版本:10.16.0

我希望它有帮助

【讨论】:

  • 我目前没有使用护照模块。这是你推荐的东西吗?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我遇到过同样的问题。问题是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

    【讨论】:

      【解决方案4】:

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

      grep jsonwebtoken package.json "jsonwebtoken": "^9.0.0", "@types/jsonwebtoken": "9.0.1",

      节点--版本 v19.6.0

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

      类型错误:“instanceof”的右侧不是对象

      已经过了一天了,我可以真的在这里做一些帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-31
        • 1970-01-01
        • 2018-11-11
        • 2019-09-17
        • 1970-01-01
        • 2018-01-11
        • 2019-11-16
        • 2017-09-16
        相关资源
        最近更新 更多