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(); }; Estoy usando Postman para probar mi API. Configuré el encabezado con una clave x-access-token y el valor superSuperSecret . Recibí el error {"name":"JsonWebTokenError","message":"jwt malformed","level":"error"} . Estoy usando este https://github.com/FortechRomania/express-mongo-example-project/blob/master/src/middlewares/validateToken.js
No puede pasar ningún valor como token. Necesita jwt.sign() para crear un token. Consulte la documentación de JWT para obtener más información.
También,
Para el nombre del encabezado de la solicitud, solo use Authorization not x-access-token . Coloque el portador antes de la ficha.
Authorization: Bearer TOKEN_STRINGCada parte del JWT es un valor codificado en base64url. Puedes obtener tu token como:
var token = req.headers.authorization.split(' ')[1];Nota :
JWT devolverá jwt mal formado si el token es nulo/firma no válida que se pasa a la función jwt.verifty
dejar token = nulo;
let payload = jwt.verify(token, 'secretKey'); // ERROR: jwt mal formado
Por lo que veo, no está enviando el token JWT real, sino el secreto. Un token JWT válido consta de una cadena de tres partes delimitada por puntos, así:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6ysw5c_adQs
Como puede ver en el sitio web anterior, 'superSuperSecret' no es un token JWT válido.