Nodejs

JWT, Bcrypt 예제

_HelloWorld_ 2024. 12. 18. 14:49

로그인 기능을 구현하기 위한 주요 단계

npm install express jsonwebtoken bcryptjs body-parser
npm install @types/express @types/jsonwebtoken @types/bcryptjs @types/body-parser --save-dev

 

로그인 기능 구현 시에 필요한 라이브러리 / 패키지 설치 


CORS & bodyParser 설명 생략 ... .


토큰 생성 및 토큰 검증

// jwtConfig.ts
import jwt from 'jsonwebtoken';

const JWT_SECRET = process.env.JWT_SECRET || 'your-secret-key'; // 비밀 키

// JWT 생성 함수
export const generateToken = (userId: string) => {
  const payload = { userId }; // payload는 사용자 고유 정보
  const options = { expiresIn: '1h' }; // 1시간 유효한 토큰

  return jwt.sign(payload, JWT_SECRET, options);
};

// JWT 검증 함수
export const verifyToken = (token: string) => {
  try {
    return jwt.verify(token, JWT_SECRET);
  } catch (error) {
    return null;
  }
};

로그인 시에 사용하는 비밀번호 검증 ( 비교 )

import bcrypt from 'bcryptjs';

// 비밀번호 암호화
export const hashPassword = ({password}:{password: string}) => {
  const salt = bcrypt.genSaltSync(10);  // salt 생성
  return bcrypt.hashSync(password, salt);  // 암호화된 비밀번호 반환
};

// 비밀번호 비교
export const comparePassword = ({password, hashedPassword}:{password: string, hashedPassword: string}) => {
  return bcrypt.compareSync(password, hashedPassword);
};

해당 글에서는 compare 내용은 제외 


실제 사용 코드

import { Request, Response } from 'express';

import {} from '../utils/bcrypt';
import { generateToken } from '../utils/jwtConfig';

export const login = (req: Request, res: Response) => {
  const { username, password }: { username: string, password: string } = req.body;
  const userId = 'test_id'

  const token = generateToken({ userId });
  res.status(200).json({ token });
}

 

  1. 회원가입 시에 사용한 정보를 입력받음
  2. 입력받은 사용자 ID로 사용자 객체 조회 ( 생략 )
  3. 조회한 사용자의 ID와 입력받은 PW가 동일한 지 확인 (생략 ) 
  4. 사용자 ID로 JWT 토큰 발급 

 

 

 

'Nodejs' 카테고리의 다른 글

Postgresql TypeORM으로 마이그레이션 하기  (0) 2024.12.19
Nodejs PostgreSQL 연동  (1) 2024.12.18
Nodejs 개발환경 셋팅  (0) 2024.12.18