JWT를 구현해보자(2)
Dev Park
2023. 3. 21.
서론
저번 게시글에서는 JWT 세팅까지 해보았다.
이번에는 JWT를 실제로 발급받아보자.
JWT 발급
JWT 발급을 받기 위해서는 우선 사용자 정보가 옯바른지 확인해야한다.
typescript1 async validateUser(loginDto: LoginDto): Promise<User | null> { 2 const user = await this.userRepository.findOne({ where: { email: loginDto.email } }); 3 4 if (user) { 5 if ((await this.comparePasswords(loginDto.password, user.password))) { 6 return user; 7 } 8 } 9 10 return null; 11 }
위의 코드로 사용자 이메일과 비밀번호가 올바른지 확인한다.
그리고 아래 코드를 통해 토큰을 발급한다.
typescript1 async login(user: User): Promise<JwtTokenDto> { 2 const payload: Payload = { email: user.email, sub: user.name }; 3 const accessToken: JwtTokenDto = { 4 accessToken: this.jwtService.sign( 5 payload, 6 ), 7 }; 8 return accessToken; 9 }
그리고 해당 코드를 실행시킬 컨트롤러 코드도 작성한다.
typescript1 @Post('login') 2 @UsePipes(ValidationPipe) 3 async login( 4 @Body() loginDto: LoginDto 5 ): Promise<object> { 6 const user: User | string = await this.authService.validateUser(loginDto); 7 if (!user) { 8 throw new UnauthorizedException('Invalid email or password'); 9 } 10 if (user.is_authed !== 1) { 11 throw new UnauthorizedException('Not Authorization'); 12 } 13 14 return this.authService.login(user); 15 };
위의 코드를 실행시키면 아래와 같이 코드를 반환한다.
image
마치며
오늘은 토큰을 발급받아 보았다.
다음 게시글에서는 발급받은 토큰을 어떻게 이용하는지 알아보자.