Estoy implementando Access Token de Refresh Token usando JWT para la función de inicio de sesión en la aplicación NodeJS . Estoy tratando de usar Redis para almacenar el Refresh Token , pero obtengo el siguiente código:
const redis = require('redis'); require('dotenv').config({ path : __dirname + '/../config/env/.env' }); let redisClient; redisClient = redis.createClient(6379, '127.0.0.1'); module.exports = redisClient; 'use strict'; const JwtUtil = require('../../middlewares/jwt-util'); const redisClient = require('../../middlewares/redis'); const authRouter = require('express').Router(); const jwt = new JwtUtil(); authRouter.post('/user-token/generate', (req, res, next) => { const accessToken = jwt.sign(req.body); const refreshToken = jwt.refresh(); redisClient.set(req.body.id, refreshToken); res.status(200).send({ result : 'success', data : { accessToken, refreshToken } }); }); module.exports = authRouter; He impreso varios registros, pero parece que redisClient.set(req.body.id, refreshToken); en authRoute.js . Parece que hay un error en.
UnhandledPromiseRejectionWarning: Error: El cliente está cerrado
(nodo: 24640) UnhandledPromiseRejectionWarning: Rechazo de promesa no manejado. Este error se originó al lanzar dentro de una función asíncrona sin un bloque catch o al rechazar una promesa que no se manejó con .catch(). Para finalizar el proceso del nodo en caso de rechazo de la promesa no controlada, utilice la marca CLI
--unhandled-rejections=strict(consulte https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode ). (Id. de rechazo: 2) (nodo: 24640) [DEP0018] Advertencia de desuso: los rechazos de promesa no controlados están en desuso. En el futuro, los rechazos de promesas que no se controlen terminarán el proceso de Node.js con un código de salida distinto de cero.
Access Token de Refresh Token se emiten normalmente. Además, el siguiente código no funciona. No estoy seguro de cómo debo reescribir el código. ¿Qué tengo que hacer?
redisClient.on('connection', () => { console.info('Redis connected!'); } Aunque estoy usando Windows , descargué Redis , realicé una prueba de ping y confirmé que el servidor se está ejecutando.
Por ahora, puedo resolver parcialmente para obtener datos, pero para establecer datos aún no se ha hecho para redis v4. #redis #v4 #redisv4
app.get('/data',(req,res) => { // check in redis first //console.log(">>>>url",url) (async () => { const userInput = (req.query.country).trim() const url = `https://en.wikipedia.org/w/api.php?action=parse&format=json§ion=0&page=${userInput}` const client = createClient({ host:'localhost', port:6379}); client.on('error', (err) => console.log('Redis Client Error', err)); await client.connect(); const response = await client.get(`${userInput}`) if(response){ const output = JSON.parse(response); res.send(output) } })(); })Implemento connect to redis v6.2 de esta manera en el archivo de inicio index.js.
const redis = require('redis'); const redisCache = createClient({ url: redis://localhost:6379 }); redisClient.on('connect', () => console.log('Connected to Redis!')); redisClient.on('error', (err) => console.log('Redis Client Error', err)); redisClient.connect(); module.exports = redisClient;