Json Web令牌verify()返回错误的jwt

时间:2018-08-14 20:05:15

标签: node.js express jwt postman

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

4 个答案:

答案 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令牌由三部分组成,该字符串由点分隔,如下所示:

  。

https://jwt.io/

在上述网站上可以看到,“ superSuperSecret”不是有效的JWT令牌。

答案 2 :(得分:0)

注意

JWT将返回 jwt格式错误,如果令牌为null,则该令牌将传递给jwt.verifty函数

  

let token = null;
  让有效负载= jwt.verify(token,'secretKey'); //   错误:jwt格式错误

答案 3 :(得分:0)

我也认为带有回调的 jwt.verfy 是一个异步函数