From b8a74d569d6c81f14e80bf2e920053b8a288d47f Mon Sep 17 00:00:00 2001 From: adhamhaddad Date: Wed, 26 Apr 2023 13:42:00 +0200 Subject: [PATCH] fix open connection with redis --- .env | 6 ++++-- src/configs/index.ts | 2 ++ src/database/redis.ts | 5 ++++- src/utils/token/setAccessToken.ts | 3 --- src/utils/token/setRefreshToken.ts | 3 --- src/utils/token/verifyAccessToken.ts | 3 --- src/utils/token/verifyRefreshToken.ts | 3 --- 7 files changed, 10 insertions(+), 15 deletions(-) diff --git a/.env b/.env index cb81047..55df3f5 100644 --- a/.env +++ b/.env @@ -11,8 +11,10 @@ POSTGRES_USER=admin POSTGRES_PASSWORD=admin # REDIS -REDIS_HOST=localhost +REDIS_URI=redis://default@localhost:6379 +REDIS_HOST=default REDIS_PORT=6379 +REDIS_USER=default REDIS_PASSWORD=admin # BCRYPT @@ -22,7 +24,7 @@ SALT_ROUNDS=10 # JWT JWT_SECRET_ACCESS_TOKEN= JWT_SECRET_REFRESH_TOKEN= -JWT_ACCESS_TOKEN_EXPIRATION=300 +JWT_ACCESS_TOKEN_EXPIRATION=15 JWT_REFRESH_TOKEN_EXPIRATION=86400 # URL diff --git a/src/configs/index.ts b/src/configs/index.ts index 5b0a3c0..ef52c1a 100644 --- a/src/configs/index.ts +++ b/src/configs/index.ts @@ -16,8 +16,10 @@ const configs = { db_name: database, db_user: process.env.POSTGRES_USER, db_password: process.env.POSTGRES_PASSWORD, + redis_uri: process.env.REDIS_URI, redis_host: process.env.REDIS_HOST, redis_port: Number(process.env.REDIS_PORT), + redis_user: process.env.REDIS_USER, redis_password: process.env.REDIS_PASSWORD, salt: Number(process.env.SALT_ROUNDS), pepper: process.env.SECRET_PEPPER, diff --git a/src/database/redis.ts b/src/database/redis.ts index 7015f8f..6b68b1d 100644 --- a/src/database/redis.ts +++ b/src/database/redis.ts @@ -1,6 +1,7 @@ import { createClient } from 'redis'; +import configs from '../configs'; -const client = createClient({ url: 'redis://default@localhost:6379' }); +const client = createClient({ url: configs.redis_uri }); client.on('connect', () => { console.log('Connected to Redis.'); @@ -10,4 +11,6 @@ client.on('error', (error) => { console.error('Error connecting to Redis:', error); }); +client.connect(); + export default client; diff --git a/src/utils/token/setAccessToken.ts b/src/utils/token/setAccessToken.ts index 33711f8..3d91be7 100644 --- a/src/utils/token/setAccessToken.ts +++ b/src/utils/token/setAccessToken.ts @@ -16,7 +16,6 @@ const privateAccessKey = path.join( ); export const setAccessToken = async (payload: Payload): Promise => { - await redisClient.connect(); try { const privateKey = await fs.promises.readFile(privateAccessKey, 'utf8'); const options: SignOptions = { @@ -33,7 +32,5 @@ export const setAccessToken = async (payload: Payload): Promise => { return token; } catch (err) { throw new Error('Failed to sign JWT'); - } finally { - await redisClient.disconnect(); } }; diff --git a/src/utils/token/setRefreshToken.ts b/src/utils/token/setRefreshToken.ts index 1485f77..6ea556d 100644 --- a/src/utils/token/setRefreshToken.ts +++ b/src/utils/token/setRefreshToken.ts @@ -16,7 +16,6 @@ const privateRefreshKey = path.join( ); export const setRefreshToken = async (payload: Payload): Promise => { - await redisClient.connect(); try { const privateKey = await fs.promises.readFile(privateRefreshKey, 'utf8'); const options: SignOptions = { @@ -33,7 +32,5 @@ export const setRefreshToken = async (payload: Payload): Promise => { return token; } catch (err) { throw new Error('Failed to sign JWT'); - } finally { - await redisClient.disconnect(); } }; diff --git a/src/utils/token/verifyAccessToken.ts b/src/utils/token/verifyAccessToken.ts index ec442b1..730a489 100644 --- a/src/utils/token/verifyAccessToken.ts +++ b/src/utils/token/verifyAccessToken.ts @@ -25,7 +25,6 @@ export const verifyAccessToken = async ( res: Response, next: NextFunction ) => { - await redisClient.connect(); try { const authorization = req.headers.authorization as string; if (!authorization) { @@ -50,10 +49,8 @@ export const verifyAccessToken = async ( throw new Error('Access token not found or expired'); } req.user = { id: decoded.id }; - await redisClient.disconnect(); return next(); } catch (err) { - await redisClient.disconnect(); if ((err as Error).name !== 'TokenExpiredError') { throw new Error('Invalid access token'); } diff --git a/src/utils/token/verifyRefreshToken.ts b/src/utils/token/verifyRefreshToken.ts index 6cd68d4..0632f90 100644 --- a/src/utils/token/verifyRefreshToken.ts +++ b/src/utils/token/verifyRefreshToken.ts @@ -15,7 +15,6 @@ const publicRefreshKey = path.join( ); export const verifyRefreshToken = async (token: string): Promise => { - await redisClient.connect(); try { const publicKey = await fs.promises.readFile(publicRefreshKey, 'utf8'); const decoded = jwt.verify(token, publicKey, { @@ -29,7 +28,5 @@ export const verifyRefreshToken = async (token: string): Promise => { return decoded; } catch (err) { throw new Error(`Failed to verify JWT: ${(err as Error).message}`); - } finally { - await redisClient.disconnect(); } };