From 6eab2613e48862766aaac74aab7ce40513c13e32 Mon Sep 17 00:00:00 2001 From: sdraris Date: Wed, 27 Aug 2025 14:47:35 +0200 Subject: [PATCH] auth guards added --- src/common/guards/auth.guard.ts | 29 +++++++++++++++++++++++++++++ src/types/express/index.d.ts | 7 +++++++ 2 files changed, 36 insertions(+) create mode 100644 src/common/guards/auth.guard.ts create mode 100644 src/types/express/index.d.ts diff --git a/src/common/guards/auth.guard.ts b/src/common/guards/auth.guard.ts new file mode 100644 index 0000000..3439f17 --- /dev/null +++ b/src/common/guards/auth.guard.ts @@ -0,0 +1,29 @@ +import { CanActivate, ExecutionContext, Injectable, UnauthorizedException } from "@nestjs/common"; +import { JwtService } from "@nestjs/jwt"; +import { Request } from 'express'; + + +@Injectable() +export class AuthGuard implements CanActivate { + constructor(private readonly jwtService: JwtService) {} + + async canActivate(context: ExecutionContext): Promise { + const request = context.switchToHttp().getRequest(); + const authHeader = request.headers['authorization'] as string | undefined; + + if (!authHeader || !authHeader.startsWith('Bearer')) { + throw new UnauthorizedException('Token manquant ou invalide'); + } + + const token = authHeader.split(' ')[1]; + try { + const payload = await this.jwtService.verifyAsync(token, + { secret: process.env.JWT_SECRET }, + ); + request.user = payload; + return true; + } catch (error) { + throw new UnauthorizedException('Token invalide ou expire'); + } + } +} \ No newline at end of file diff --git a/src/types/express/index.d.ts b/src/types/express/index.d.ts new file mode 100644 index 0000000..9c7cb14 --- /dev/null +++ b/src/types/express/index.d.ts @@ -0,0 +1,7 @@ +import { Users } from 'src/entities/users.entity'; + +declare module 'express-serve-static-core' { + interface Request { + user?: Users | any; + } +}