본문 바로가기
Back-end/기초부터 따라하는 nest.js

#10-1. 기초부터 따라하는 Nest.js : User Decorator

by hsloth 2023. 5. 11.

해당 포스팅은 nest.js 9.0.0 버전, typeorm 0.3.x 버전을 기준으로 작성되었습니다.
모든 글은 작성자의 주관이 100% 담겨있기 때문에 부정확할 수 있습니다.

 

#pre. 터미널을 켜고 프로젝트 폴더로 이동

https://suloth.tistory.com/44

 

#0-1. 기초부터 따라하는 nest.js : 터미널 키는 법 + 터미널에서 작업 폴더 이동

윈도우 윈도우는 윈도우+R 버튼을 누른 후, cmd 를 입력하여 터미널을 킵니다. 혹은 윈도우 버튼을 눌러서 검색창에 cmd를 검색하면 터미널이 나올텐데 그걸 실행시켜주시면 됩니다. Mac OS Mac의 경

suloth.tistory.com

 
위의 링크의 내용을 참고하여 study 폴더로 이동해줍니다.
그리고 code . 명령어를 통해 vscode를 열어줍니다.


이전 포스팅에서 로그인에 대해서 배웠습니다.

https://suloth.tistory.com/78

 

#10. 기초부터 따라하는 Nest.js : JWT 로그인 구현과 Guard(2) - 실전편

해당 포스팅은 nest.js 9.0.0 버전, typeorm 0.3.x 버전을 기준으로 작성되었습니다. 모든 글은 작성자의 주관이 100% 담겨있기 때문에 부정확할 수 있습니다. #pre. 터미널을 켜고 프로젝트 폴더로 이동 ht

suloth.tistory.com

 

로그인을 확인할 때, 해당 user에 있는 userId를 Guard가 자동으로 req.user로 할당해줍니다.

이번 포스팅에서는 이를 조금더 편하게 사용하기 위해 User 데코레이터를 만들어 보겠습니다.


먼저, src폴더 안에 decorators폴더를 만들어 줍시다.

 

그리고 user.decorator.ts 파일을 만들어 줍시다.

 

사진

 

그리고 user.decorator.ts 파일에 다음과 같이 코드를 작성해 줍시다.

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

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

createParamDecorator를 사용해서 함수의 파라미터에서 사용하는 데코레이터를 생성합니다.

ctx.switchToHttp().getRequest() 함수를 통해서 request를 받아오고

request.user를 리턴해주면 완성입니다!

 

 

사용할 때는 다음과 같이 사용할 수 있습니다.

@UseGuards(LoggedInGuard)
@Get()
async getUserInfo(@User() user) {
	return user;
}

UseGuards로 로그인이 되어있는지 확인했다면, User데코레이터를 사용하여 user정보를 가져올 수 있게 됩니다.

 

이제, 이것을 이용하여 로그인이 필요한 서비스에서 userId를 뽑아서 사용할 수 있습니다!