Empecé a aprender Nodejs y estoy atrapado en algún punto intermedio. Instalé una nueva biblioteca de npm y era express-jwt , muestra algún tipo de error después de ejecutarse. Adjunto el código y los logs del error, por favor ayúdenme!
const jwt = require('jsonwebtoken'); require('dotenv').config() const expressJwt = require('express-jwt'); const User = require('../models/user'); exports.requireSignin = expressJwt({ secret: process.env.JWT_SECRET});Lo siguiente son los registros del error.
[nodemon] starting `node app.js` D:\shubh\proj\Nodejs\nodeapi\node_modules\express-jwt\lib\index.js:22 if (!options.algorithms) throw new Error('algorithms should be set'); ^ **Error: algorithms should be set** at module.exports (D:\shubh\proj\Nodejs\nodeapi\node_modules\express-jwt\lib\index.js:22:34) at Object.<anonymous> (D:\shubh\proj\Nodejs\nodeapi\controllers\auth.js:64:26) at Module._compile (internal/modules/cjs/loader.js:1138:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10) exports.requireSignin = expressJwt ({ secret: process.env.JWT_SECRET, algorithms: YOU CHOOSE ALGORITHM });Para obtener más detalles, visite: https://www.npmjs.com/package/express-jwt
jwt({ secret: new Buffer('shhhhhhared-secret', 'base64') })Para aquellos que se preguntan qué algoritmo se usa para generar sus tokens
Un JWT se compone de 3 partes separadas por un punto ' . ':
<header>.<payload>.<signature>El encabezado (y la carga útil) es solo un objeto JSON codificado en Base64 que contiene el nombre del algoritmo hash.
Por ejemplo, con ese token:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZXNzYWdlIjoiaGkgc3RhY2tvdmVyZmxvdyJ9.01jBDw7uUgCr8cRMEQt4KJxfL6QLkt0ZuHly2AxdXZYpodría usar atob() en la consola javascript de su navegador para decodificar el encabezado:
atob('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9') // → "{\"alg\":\"HS256\",\"typ\":\"JWT\"}"Aquí se utilizó HS256.
Debe agregar la propiedad de algoritmos al constructor jwt.
Ejemplo;
expressJwt({ secret: process.env.JWT_SECRET, algorithms: ['RS256'] });El problema causado por los cambios en la versión 6.0.0. La documentación también se ha actualizado recientemente, dice:
El parámetro de algoritmos es necesario para evitar posibles ataques de degradación al proporcionar bibliotecas de terceros como secretos.
Entonces ahora es obligatorio especificar la propiedad del algoritmo, así:
expressJwt({ secret: 'secret', algorithms: ['HS256'] })si se enfrenta a este error, es posible que esté utilizando la nueva versión de 'express-jwt' Downgrade a la versión ^5.3.3 para resolverlo
si el algoritmo anterior: ['RS256'] no funciona, intente esto, algoritmos: ['HS256']
Tuve que enfrentar el mismo error, y después de mencionar el algoritmo en la inicialización express-jwt, el error desapareció.
Código de ejemplo:
exports.requireSignin= expressJwt({ secret: process.env.jwtSecret, userProperty: "auth", algorithms: ["RS256"], }