diff --git a/src/guard/auth.guard.ts b/src/guard/auth.guard.ts new file mode 100644 index 0000000..2cb402d --- /dev/null +++ b/src/guard/auth.guard.ts @@ -0,0 +1,26 @@ +import { Injectable } from "@nestjs/common"; +import { CanActivate, ExecutionContext, UnauthorizedException } from "@nestjs/common"; +import { JwtService } from "@nestjs/jwt"; +import { Observable } from "rxjs"; + +@Injectable() +export class JwtAuthGuard implements CanActivate { + constructor(private readonly jwtService: JwtService) {} + + canActivate(context: ExecutionContext): boolean | Promise | Observable { + const request = context.switchToHttp().getRequest(); + const token = request.headers["authorization"]?.split(" ")[1]; + + if (!token) { + throw new UnauthorizedException("Token not found"); + } + + try { + const decoded = this.jwtService.verify(token); + request.user = decoded; + return true; + } catch (error) { + throw new UnauthorizedException("Invalid or expired token"); + } + } +} diff --git a/src/users/users.module.ts b/src/users/users.module.ts index 117da23..32eeb2d 100644 --- a/src/users/users.module.ts +++ b/src/users/users.module.ts @@ -6,6 +6,7 @@ import { User } from './entities/user.entity'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { PassportModule } from '@nestjs/passport'; import { JwtModule } from '@nestjs/jwt'; +import { JwtAuthGuard } from 'src/guard/auth.guard'; @Module({ @@ -25,6 +26,6 @@ import { JwtModule } from '@nestjs/jwt'; }), ], controllers: [UsersController], - providers: [UsersService], + providers: [UsersService,JwtAuthGuard], }) export class UsersModule {}