공식 문서에서 나오는 쿠키 데코레이터는 다음 내용과 같다.
export const Cookies = createParamDecorator(
(data: string, ctx: ExecutionContext) => {
const request = ctx.switchToHttp().getRequest();
return data ? request.cookies?.[data] : request.cookies;
},
);
우리는 JWT 토큰을 쓰기 때문에 페이로드를 뽑아 데이터를 가져오는 데는 대략 다음과 같은 로직을 거쳐야 한다.
- AuthGuard에서 JWT를 한번 검증한다.
- Cookie 데코레이터에서 accessToken 이름의 쿠키를 뜯어온다.
- 컨트롤러에서 JwtService.verify를 사용해 스트링 값으로부터 Payload를 뜯어온다.
- 실 로직에 활용한다.
이 로직은 1~3번의 중복 코드를 작성해야한다.
쿠키 데코레이터가 쿠키를 가져온다는 책임만을 가지고 있기 때문이다.
UserPayload
라는 이름의 데코레이터를 만드는 건 어떨까?
export const UserPayload = createParamDecorator(
async (data: string, ctx: ExecutionContext) => {
const jwtService = new JwtService({});
const request = ctx.switchToHttp().getRequest();
const cookie = request.cookies;
const jwt: Payload = await jwtService.verifyAsync(cookie.accessToken, {
issuer: process.env.JWT_ISSUER,
secret: process.env.JWT_ACCESS_SECRET,
});
return jwt;
},
);
와!
'DEVELOPMENT > NODEJS' 카테고리의 다른 글
NestJS :: param과 URI의 우선순위 문제 (0) | 2022.04.19 |
---|---|
Node.js BASE64로 AWS S3에 이미지 업로드하기 (0) | 2022.04.17 |
cookie 데코레이터에서 JWT payload 추출하기 (0) | 2022.04.08 |
pm2 package.json 명령어 실행하기 (0) | 2022.03.30 |
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: (0) | 2022.02.02 |