NestMiddleware 미들웨어
목적
- JWT토큰의 사용자 아이디 정보로, 완전한 사용자 정보로 만들어주자.
로직
- x-jwt 라는 key값이 header에 있는지 확인
- jwt 토큰을 해석하여 ,사용자 id를 해독한다.
- 사용자 id를 통해 사용자 정보를 읽고 req에 넣는다.
코드
- jwt.middleware.ts 의 구현
import { Injectable, NestMiddleware } from '@nestjs/common';
import { NextFunction, Request, Response } from 'express';
import { MemberService } from 'src/member/member.service';
import { JwtService } from './jwt.service';
@Injectable()
export class JwtMiddleWare implements NestMiddleware<Request, Response> {
constructor(
private readonly jwtService: JwtService,
private readonly memberService: MemberService,
) { }
async use(req: Request, res: Response, next: NextFunction) {
if ('x-jwt' in req.headers) {
const token = req.headers['x-jwt'];
try {
const decoded = this.jwtService.verify(token.toString());
if (typeof decoded === 'object' && decoded.hasOwnProperty('email_id')) {
const { ok, memberInfo } = await this.memberService.getMemberInfo({
email_id: decoded['email_id'],
});
if (ok) req['memberInfo'] = memberInfo;
}
} catch (error) {
console.log(error);
}
}
next();
}
}
- App.module에 미들웨어 적용
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(JwtMiddleWare).forRoutes({
path: '*',
method: RequestMethod.ALL,
});
}
}