我正在与Vue建立我的第一个SPA项目。
我决定使用NodeJS作为后端,但是,我很难用JsonWebToken构建登录功能。
我写了一些代码来了解JWT是如何工作的,当我试图查看JWT如何验证时,服务器给了我一个错误。
JsonWebTokenError: jwt must be provided
at Object.module.exports [as verify] (c:\dir\node_modules\jsonwebtoken\verify.js:39:17)
at c:\projects\practice\demo\back\server.js:34:17
以下是我的server.js
的代码这是导入内容的代码。
const express = require('express');
const jwt = require('jsonwebtoken');
const bodyParser = require('body-parser');
const api = express();
api.use(bodyParser.json());
api.use(bodyParser.urlencoded({ extended: true }));
这是用于发布JWT的API。
api.post('/secure', function (req, res) {
const token = jwt.sign({ user: {id:1, name:'ME!', role: 'average'} }, 'dsfklgj');
console.log(token);
res.json({jwt: token});
});
这是用于检查JWT的API。
api.post('/check/post', function (req, res) {
const token = req.body.jwt;
const x = jwt.verify(token, 'dsfklgj', function (err, decoded) {
if (err) throw err;
console.log(decoded);
});
if (x != true) {
res.json({ auth: false });
}else {
res.json({ auth: true });
}
});
答案 0 :(得分:8)
必须提供jwt
当即将到来的令牌为空或空时,会发生此错误。
答案 1 :(得分:0)
您可能没有在特定文件中定义jwt
,或者它为null或为空。因此,您收到错误。我只测试你的代码,它适用于我。可能是您没有正确地将jwt
令牌发送到帖子请求中。
const express = require('express');
const jwt = require('jsonwebtoken');
const bodyParser = require('body-parser');
const http = require('http');
const api = express();
api.use(bodyParser.json());
api.use(bodyParser.urlencoded({ extended: true }));
api.post('/secure', function(req, res) {
const token = jwt.sign({ user: { id: 1, name: 'ME!', role: 'average' } }, 'dsfklgj');
console.log(token);
res.json({ jwt: token });
});
api.post('/check/post', function(req, res) {
const token = req.body.jwt;
console.log('token: ' + token);
const x = jwt.verify(token, 'dsfklgj', function(err, decoded) {
if (err) throw err;
console.log(decoded);
});
console.log(x);
if (x != true) {
res.json({ auth: false });
} else {
res.json({ auth: true });
}
});
api.set('port', 3000);
var server = http.createServer(api);
server.listen(api.get('port'), function() {
console.log("Express server listening on port " + api.get('port'));
});
BTW没有办法像这样const x = jwt.verify(token, 'dsfklgj', function (err, decoded) {
进行测试。以Sync
方式写入或在async
回调函数中检查条件。在您的情况下,x
将为undefined
,并且无法保证何时运行。