From 7f304653c045e02aa47cd10dc3c14ee8d4cc9afc Mon Sep 17 00:00:00 2001 From: sdraris Date: Thu, 28 Aug 2025 12:07:23 +0200 Subject: [PATCH] added decorator + guard --- src/common/decorators/public.decorator.ts | 4 ++++ src/common/guards/auth.guard.ts | 14 ++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 src/common/decorators/public.decorator.ts diff --git a/src/common/decorators/public.decorator.ts b/src/common/decorators/public.decorator.ts new file mode 100644 index 0000000..431422b --- /dev/null +++ b/src/common/decorators/public.decorator.ts @@ -0,0 +1,4 @@ +import { SetMetadata } from "@nestjs/common"; + +export const IS_PUBLIC_KEY = 'isPublic'; +export const Public = () => SetMetadata(IS_PUBLIC_KEY, true); \ No newline at end of file diff --git a/src/common/guards/auth.guard.ts b/src/common/guards/auth.guard.ts index 3439f17..6bef54a 100644 --- a/src/common/guards/auth.guard.ts +++ b/src/common/guards/auth.guard.ts @@ -1,13 +1,23 @@ import { CanActivate, ExecutionContext, Injectable, UnauthorizedException } from "@nestjs/common"; +import { Reflector } from "@nestjs/core"; import { JwtService } from "@nestjs/jwt"; import { Request } from 'express'; - +import { IS_PUBLIC_KEY } from "../decorators/public.decorator"; @Injectable() export class AuthGuard implements CanActivate { - constructor(private readonly jwtService: JwtService) {} + constructor( + private readonly jwtService: JwtService, + private readonly reflector: Reflector, + ) {} async canActivate(context: ExecutionContext): Promise { + const isPublic = this.reflector.getAllAndOverride(IS_PUBLIC_KEY, [ + context.getHandler(), + context.getClass(), + ]); + if (isPublic) return true; + const request = context.switchToHttp().getRequest(); const authHeader = request.headers['authorization'] as string | undefined;