diff --git a/apps/server/src/core/auth/guards/jwt.guard.ts b/apps/server/src/core/auth/guards/jwt.guard.ts index 9f6e1c69..cdfba1cd 100644 --- a/apps/server/src/core/auth/guards/jwt.guard.ts +++ b/apps/server/src/core/auth/guards/jwt.guard.ts @@ -6,14 +6,26 @@ import { } from '@nestjs/common'; import { TokenService } from '../services/token.service'; import { UserService } from '../../user/user.service'; +import { Reflector } from '@nestjs/core'; +import { IS_PUBLIC_KEY } from '../../../decorators/public.decorator'; @Injectable() export class JwtGuard implements CanActivate { constructor( private tokenService: TokenService, private userService: UserService, + private 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 token: string = await this.tokenService.extractTokenFromHeader( request, diff --git a/apps/server/src/decorators/jwt-user.decorator.ts b/apps/server/src/decorators/jwt-user.decorator.ts deleted file mode 100644 index a01f0f42..00000000 --- a/apps/server/src/decorators/jwt-user.decorator.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { createParamDecorator, ExecutionContext } from '@nestjs/common'; - -export const JwtUser = createParamDecorator( - (data: unknown, ctx: ExecutionContext) => { - const request = ctx.switchToHttp().getRequest(); - const user = request['user']; - return { id: user.sub, email: user.email }; - }, -); diff --git a/apps/server/src/decorators/public.decorator.ts b/apps/server/src/decorators/public.decorator.ts new file mode 100644 index 00000000..b3845e12 --- /dev/null +++ b/apps/server/src/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);