const jwt = require("jsonwebtoken");
const SECRET = "superSuperSecret";
module.exports = function(req, res, next) {
const token = req.body.token || req.query.token || req.headers[ "x-access-token" ];
if (token) {
return jwt.verify(token, SECRET, function(err, decoded) {
if (err) {
return res.json({
success: false,
message: "Failed to authenticate token.",
});
}
req.user = decoded;
return next();
});
}
return res.unauthorized();
};
我正在使用Postman测试我的API。我使用x-access-token
键和值superSuperSecret
设置了标题。我收到错误{"name":"JsonWebTokenError","message":"jwt malformed","level":"error"}
。我正在使用此https://github.com/FortechRomania/express-mongo-example-project/blob/master/src/middlewares/validateToken.js
答案 0 :(得分:2)
您不能将任何值作为令牌传递。您需要jwt.sign()
才能创建令牌。有关更多信息,请查看JWT的文档。
还
对于请求标头名称,只需使用Authorization
而不是x-access-token
。将承载置于令牌之前。
Authorization: Bearer TOKEN_STRING
JWT的每个部分都是base64url编码的值。您可以通过以下方式获取令牌:
var token = req.headers.authorization.split(' ')[1];
答案 1 :(得分:1)
据我所知,您不是发送实际的JWT令牌,而是发送密码。有效的JWT令牌由三部分组成,该字符串由点分隔,如下所示:
。
在上述网站上可以看到,“ superSuperSecret”不是有效的JWT令牌。
答案 2 :(得分:0)
注意:
JWT将返回 jwt格式错误,如果令牌为null,则该令牌将传递给jwt.verifty函数
let token = null;
让有效负载= jwt.verify(token,'secretKey'); // 错误:jwt格式错误
答案 3 :(得分:0)
我也认为带有回调的 jwt.verfy 是一个异步函数