Estoy usando Node.js más un paquete llamado jwt-redis para crear y verificar tokens de autenticación en mi API, de esta manera puedo destruirlos de redis db y cerrar sesión.
Ya logré la primera parte, la creación de tokens a través del método jwtr.sign(). El token se crea con éxito a partir de una carga útil y un secreto y luego se incluye en el cuerpo de la respuesta, así como una nueva clave en redis.
Ahora, estoy tratando de implementar una función para autenticar el token, que principalmente obtiene el encabezado de autorización de las solicitudes (se imprime correctamente en la consola), conecta el cliente redis (aparentemente también está bien) y finalmente intenta verificarlo.
Mi código es el siguiente:
async function authenticateToken(req, res, next) { // verify if user already exists const authHeader = req.header('Authorization') // console.log('autheader', authHeader) const token = authHeader && authHeader.split(' ')[1] //returns or undenifed or the token if (token == null) return res.status(401).json({ Error: 'Usuario no registrado' }) console.log('token:' + token) const redis = require('redis'); const JWTR = require('jwt-redis').default; //ES6 import JWTR from 'jwt-redis'; const redisClient = redis.createClient(); const jwtr = new JWTR(redisClient) await redisClient.connect().then(function() { console.log("Redis plugged in.") }) jwtr.verify(token, process.env.ACCESS_TOKEN_SECRET, function(err, user) { if(err) return res.status(401).json({ Error: 'Usuario no registrado' }) console.log('user'+user) req.USER = user next() }) }Sin embargo, como se dijo, se atasca en jwtr.verify(). La consola imprime tanto el token como el mensaje "Redis conectado", pero no sucede nada más. La aplicación sigue ejecutándose y el botón de la llamada del cartero sigue siendo "Enviando" hasta que obligo a detener el nodo.
Como ese método devuelve una promesa, lo intenté con ambos then y await sin éxito.
¿Alguna idea de lo que está pasando aquí, chicos?
Realmente apreciaré tu ayuda :)
de la documentación
jwtr.verify(token, secretOrPublicKey, [opciones]): Promesa
usted está manejando eso con devolución de llamada
entonces creo que tienes que modificar tu código de esta manera
jwtr.verify(token, process.env.ACCESS_TOKEN_SECRET).then(user => { console.log('user'+user) req.USER = user next() }, err => { res.status(401).json({ Error: 'Usuario no registrado' }) })