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

Cyr*_*l F 2 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();
};
Run Code Online (Sandbox Code Playgroud)

我正在使用Postman测试我的API。我用x-access-token键和value 设置标题superSuperSecret。我弄错了{"name":"JsonWebTokenError","message":"jwt malformed","level":"error"}。我正在使用这个https://github.com/FortechRomania/express-mongo-example-project/blob/master/src/middlewares/validateToken.js

Mab*_*abd 6

注意

JWT 将返回 jwt 格式错误如果 Token 为 null/Invalid-Signature 传递给 jwt.verifty 函数

让令牌=空;
让有效载荷 = jwt.verify(token, 'secretKey'); // 错误:jwt 格式错误


Soo*_*ngh 5

您不能将任何值作为令牌传递。您需要jwt.sign()创建一个令牌。有关更多信息,请参见JWT的文档。

也,

对于请求标头名称,请使用Authorizationnot x-access-token。将Bearer放置在令牌之前。

Authorization: Bearer TOKEN_STRING
Run Code Online (Sandbox Code Playgroud)

JWT的每个部分都是base64url编码的值。您可以通过以下方式获得令牌:

var token = req.headers.authorization.split(' ')[1];
Run Code Online (Sandbox Code Playgroud)


use*_*273 5

据我所知,您发送的不是实际的 JWT 令牌,而是秘密。有效的 JWT 令牌由由点分隔的三部分字符串组成,如下所示:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQs SW5C

https://jwt.io/

正如您在上面的网站上看到的,“superSuperSecret”不是有效的 JWT 令牌。