From ec828717b57da3befd20baab1f4d9246df1e9b60 Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Sat, 14 Feb 2026 13:00:13 +0330 Subject: [PATCH] fix bug --- src/modules/auth/auth.module.ts | 6 +++--- src/modules/auth/services/tokens.service.ts | 23 ++++++++++++++------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/modules/auth/auth.module.ts b/src/modules/auth/auth.module.ts index a4c51b2..e1c4ac6 100644 --- a/src/modules/auth/auth.module.ts +++ b/src/modules/auth/auth.module.ts @@ -20,13 +20,13 @@ import { NotificationsModule } from '../notifications/notifications.module'; forwardRef(() => UserModule), JwtModule.registerAsync({ useFactory: (configService: ConfigService) => { - const expiresIn = configService.getOrThrow('JWT_EXPIRATION_TIME'); + const raw = configService.get('JWT_EXPIRATION_TIME'); + const expiresIn = Math.max(60, parseInt(String(raw ?? 3600), 10) || 3600); return { global: true, secret: configService.getOrThrow('JWT_SECRET'), signOptions: { - // Use string format with time unit for explicit expiration (value should be in seconds) - expiresIn: `${expiresIn}s`, + expiresIn, }, }; }, diff --git a/src/modules/auth/services/tokens.service.ts b/src/modules/auth/services/tokens.service.ts index 5bdf251..59adbcf 100755 --- a/src/modules/auth/services/tokens.service.ts +++ b/src/modules/auth/services/tokens.service.ts @@ -27,8 +27,8 @@ export class TokensService { slug: string, em?: EntityManager, ) { - const refreshExpire = this.configService.getOrThrow('REFRESH_TOKEN_EXPIRE'); - const accessExpire = this.configService.getOrThrow('JWT_EXPIRATION_TIME'); + const refreshExpire = this.parseRefreshExpire(); + const accessExpire = this.parseAccessExpire(); const payload: ITokenPayload | IAdminTokenPayload = isAdmin ? { adminId: ownerId, shopId: shopId } @@ -48,10 +48,19 @@ export class TokensService { } private generateAccessToken(payload: ITokenPayload | IAdminTokenPayload, expiresIn: number) { - // Ensure expiresIn is passed as a string with time unit for reliability - // JWT library accepts: number (seconds) or string with unit (e.g., "3600s", "1h") - // Using string format is more explicit and prevents unit confusion - return this.jwtService.signAsync(payload, { expiresIn: `${expiresIn}s` }); + return this.jwtService.signAsync(payload, { expiresIn }); + } + + private parseAccessExpire(): number { + const raw = this.configService.get('JWT_EXPIRATION_TIME'); + const parsed = parseInt(String(raw ?? 3600), 10); + return parsed > 0 ? parsed : 3600; + } + + private parseRefreshExpire(): number { + const raw = this.configService.get('REFRESH_TOKEN_EXPIRE'); + const parsed = parseInt(String(raw ?? 15), 10); + return parsed > 0 ? parsed : 15; } async storeRefreshToken( @@ -62,7 +71,7 @@ export class TokensService { em?: EntityManager, ) { const entityManager = em || this.em; - const refreshExpire = this.configService.getOrThrow('REFRESH_TOKEN_EXPIRE'); + const refreshExpire = this.parseRefreshExpire(); const expiresAt = dayjs().add(refreshExpire, 'day').toDate(); const hashedToken = this.hashToken(refreshToken);