[typescript] Nest.js에서 타입스크립트로 인증 및 권한 부여 구현하기
Nest.js는 타입스크립트로 구축된 서버 사이드 애플리케이션을 만들 수 있게 해주는 프레임워크입니다. 이 글에서는 Nest.js 애플리케이션에서 사용자 인증 및 권한 부여를 구현하는 방법을 알아보겠습니다.
목차
Passport 모듈 설정
Nest.js에서 Passport 모듈을 사용하여 사용자의 로컬 또는 소셜 미디어 인증을 구현할 수 있습니다. 우선, Passport 모듈을 애플리케이션에 설정하고 인증 전략을 구성해야 합니다.
import { Module } from '@nestjs/common';
import { PassportModule } from '@nestjs/passport';
@Module({
imports: [
PassportModule.register({ defaultStrategy: 'jwt' }),
],
})
export class AuthModule {}
사용자 모델 및 서비스 생성
다음으로, 사용자 모델과 사용자 관련 비즈니스 로직을 담당할 서비스를 생성해야 합니다. 사용자 모델은 주로 데이터베이스 스키마와 일치하며, 서비스는 사용자 관련 로직을 처리합니다.
// user.model.ts
export class User {
id: number;
username: string;
password: string;
}
// user.service.ts
import { Injectable } from '@nestjs/common';
@Injectable()
export class UserService {
// 사용자 관련 비즈니스 로직 구현
}
JWT 토큰 발급 및 검증
인증된 사용자에게 JWT(JSON Web Token) 토큰을 발급하고, 요청 시 해당 토큰을 검증하여 인가된 사용자인지 확인해야합니다. jsonwebtoken
패키지를 사용하여 토큰을 발급 및 검증할 수 있습니다.
import * as jwt from 'jsonwebtoken';
const token = jwt.sign({ username: user.username, sub: user.id }, secretKey, { expiresIn: '1h' });
// 토큰 검증
const decoded = jwt.verify(token, secretKey);
권한 부여 미들웨어 작성
마지막으로, Nest.js에서는 권한 부여를 위해 미들웨어를 작성하여 요청에 대한 권한을 검사할 수 있습니다. 예를 들어, 특정 엔드포인트에 대한 접근 권한을 검사하는 미들웨어를 작성할 수 있습니다.
import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response } from 'express';
@Injectable()
export class AuthMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: Function) {
// 권한 검사 로직 구현
next();
}
}
위와 같이 Nest.js에서는 타입스크립트를 사용하여 간단하게 사용자 인증 및 권한 부여를 구현할 수 있습니다. Nest.js의 강력한 모듈 시스템과 타입 안정성을 활용하여 보안적인 애플리케이션을 구축할 수 있습니다.
관련 참고 자료: Nest.js 공식 문서