본문 바로가기
개발/Nest

nest 데코레이터.. current user.. jwt-auth.guard.ts

by 안뇽! 2026. 2. 22.
반응형

1. jwt-auth.guard.ts에서는 헤더에서 토큰 빼고 request.user에 넣는다 .

import {
  CanActivate,
  ExecutionContext,
  Injectable,
  UnauthorizedException,
} from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';

@Injectable()
export class JwtAuthGuard implements CanActivate {
  constructor(private readonly jwtService: JwtService) {}

  canActivate(context: ExecutionContext): boolean {
    const request = context.switchToHttp().getRequest();
    const token = this.extractToken(request);

    if (!token) {
      throw new UnauthorizedException('토큰이 없습니다');
    }

    try {
      const payload = this.jwtService.verify(token, { secret: 'jwtwt' });
      request['user'] = payload;
      return true;
    } catch {
      throw new UnauthorizedException('유효하지 않은 토큰입니다');
    }
  }

  private extractToken(request: any): string | null {
    const authHeader = request.headers.authorization;

    if (!authHeader || !authHeader.startsWith('Bearer ')) {
      return null;
    }

    return authHeader.split(' ')[1];
  }
}

 

2. @CurretUser에서는 request.user를 파라미터로 보낸다. (@CurrentUser를 파라미터데코레이터로 정의)

import { createParamDecorator, ExecutionContext } from '@nestjs/common';

export const CurrentUser = createParamDecorator(
  (data: unknown, ctx: ExecutionContext) => {
    const request = ctx.switchToHttp().getRequest();
    return request.user;
  },
);

 

- createParamDecorator = 반환값을 파라미터에 넣어주는 함수 만들기.

 

3. CurrentUser에서 반환하는 user는 guard의 토큰이 해독된 유저임. 서비스로직을 거칠 필요 없이 바로 프론트에 응답으로 뿌려준다.

 @UseGuards(JwtAuthGuard)
  @Get('me')
  getMe(@CurrentUser() user: { id: number }) {
    return user;
  }

 

반응형

'개발 > Nest' 카테고리의 다른 글

nest 4일차  (0) 2026.02.10
nest 3일차  (0) 2026.02.07
nest 공부 2일차  (0) 2026.02.05
다시 nest  (0) 2026.02.04
리포지토리 패턴  (0) 2024.11.16