로그인 기능을 구현하기 위한 주요 단계
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 });
}
- 회원가입 시에 사용한 정보를 입력받음
- 입력받은 사용자 ID로 사용자 객체 조회 ( 생략 )
- 조회한 사용자의 ID와 입력받은 PW가 동일한 지 확인 (생략 )
- 사용자 ID로 JWT 토큰 발급
'Nodejs' 카테고리의 다른 글
Postgresql TypeORM으로 마이그레이션 하기 (0) | 2024.12.19 |
---|---|
Nodejs PostgreSQL 연동 (1) | 2024.12.18 |
Nodejs 개발환경 셋팅 (0) | 2024.12.18 |