[typescript] 타입스크립트로 Nest.js 인증 및 JWT 토큰 관리하기

Nest.js는 타입스크립트로 작성된 서버 사이드 애플리케이션을 구축하는 데 사용되는 프레임워크입니다. 이번 블로그에서는 Nest.js에서 타입스크립트를 사용하여 JWT(JSON Web Token)를 이용한 사용자 인증 및 토큰 관리에 대해 알아보겠습니다.

목차

  1. Nest.js와 타입스크립트
  2. JWT 토큰 및 사용자 인증 구현
  3. Nest.js 앱에 JWT 인증 미들웨어 추가
  4. JWT 토큰 관리

Nest.js와 타입스크립트

Nest.js는 Angular와 비슷한 구조를 가지고 있으며, 컨트롤러, 모듈, 서비스 등으로 구성되어 있습니다. 또한, Nest.js는 타입스크립트를 지원하므로 코드의 가독성 및 유지보수가 용이합니다.

JWT 토큰 및 사용자 인증 구현

먼저, 사용자 인증을 위해 JWT 토큰을 발급하고 인증하는 과정을 구현해야 합니다. 아래는 간단한 예시 코드입니다.

import * as jwt from 'jsonwebtoken';

@Injectable()
export class AuthService {
  constructor(private userService: UserService) {}

  async signToken(user: User): Promise<string> {
    const payload = { username: user.username, sub: user.userId };
    return jwt.sign(payload, 'secretKey', { expiresIn: '1h' });
  }

  async validateUser(username: string, password: string): Promise<any> {
    const user = await this.userService.findByUsername(username);
    if (user && user.password === password) {
      return user;
    }
    return null;
  }
}

Nest.js 앱에 JWT 인증 미들웨어 추가

다음으로, Nest.js 애플리케이션에 JWT 인증 미들웨어를 추가하여 요청을 인증하는 과정을 구현합니다.

import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';

@Injectable()
export class AuthMiddleware implements NestMiddleware {
  use(req: Request, res: Response, next: NextFunction) {
    const token = req.headers.authorization;
    if (token) {
      // 토큰 유효성 검사 로직 구현
      next();
    } else {
      res.status(401).send('Unauthorized');
    }
  }
}

JWT 토큰 관리

마지막으로, JWT 토큰의 관리는 토큰의 발급, 갱신, 검증 및 만료 등을 관리해주어야 합니다. 이러한 토큰 관리 로직은 Nest.js의 서비스를 통해 구현할 수 있습니다.

이상으로 Nest.js에서 타입스크립트를 활용한 JWT 토큰 인증 및 관리에 대해 알아보았습니다. Nest.js와 타입스크립트를 사용하여 보안적인 웹 애플리케이션을 구축할 때 JWT 토큰을 사용하는 것은 매우 유용합니다.

더 자세한 내용은 Nest.js 공식 문서를 참고하시기 바랍니다.