개발일지

[NestJS] Custom decorators 본문

NestJS, Node.js/#01 Project - 투표 커뮤니티

[NestJS] Custom decorators

lyjin 2022. 10. 28.

Custom Decorator

앞서 구현한 JwtAccessGuard는 JwtAccessStrategy를 거쳐 인증된 user 객체를 반환했습니다. 이를 바탕으로 인증된 유저 정보를 추출하는 @CurrUser() 데코레이터를 구현했습니다.

 

// auth.decorator.ts
import { createParamDecorator, ExecutionContext } from '@nestjs/common';

export const CurrUser = createParamDecorator(
  (data: string, ctx: ExecutionContext) => {
    const request = ctx.switchToHttp().getRequest();
    const user = request?.user;

    return data ? user[data] : user.id;
  },
);

 

Decorator data

위의 createParamDecorator의 인자인 data는 데코레이터 선언 시 인자로 넘기는 값입니다. @CurrUser('email') 과 같이 사용하면 user 객체의 email 값만 가져옵니다. 따라서 위의 코드는 받아오는 인자가 없으면 user id를 반환하도록 구현했습니다. 구현한 데코레이터는 다음과 같이 사용합니다.

 

  @UseGuards(JwtAccessGuard)
  @Get('profile')
  async getUserProfile(@CurrUser('id') userId: number) {
    console.log('userid: ', userId);
    const whereOption: WhereOptionByUserId = { id: userId };
    return {
      users: await this.usersRepository.findUserByWhereOption(whereOption),
    };
  }