비밀번호 검증 오류 해결기

정혜인·2024년 11월 11일
0

🔐 비밀번호 검증 오류 해결기

로그인 api를 구현한 후 테스트만을 위해 비밀번호를 임의로 11111111로 db에 저장하고 테스트해보았는데, 비밀번호를 제대로 입력했음에도 자꾸 틀린 비밀번호라는 오류가 발생했습니다.
bcrypt를 사용함으로써 발생한 문제였는데, 이 문제 해결에 대해 정리해보았습니다.


1. 문제 상황

로그인 시도 중 Invalid password라는 오류가 발생했습니다. 데이터베이스에 저장된 비밀번호가 명백하게 11111111인 것을 확인했음에도 불구하고 오류가 발생했죠. 로그인 로직은 아래와 같았습니다.

const isPasswordValid = await bcrypt.compare(password, user.password);

2. 원인 분석

비밀번호 검증에는 bcrypt.compare 메서드를 사용했는데, 이는 해시된 비밀번호와 평문 비밀번호를 비교하는 방식입니다. 문제는 데이터베이스에 비밀번호가 평문으로 저장되어 있었기 때문에, bcrypt는 이 값을 해시로 인식하지 못하고 오류를 일으킨 것이었습니다.

3. 해결 방법

로그인에 사용될 모든 비밀번호는 데이터베이스에 저장하기 전에 반드시 해싱해야 합니다.

1) 테스트용 비밀번호를 수동으로 해싱

테스트용 비밀번호 11111111을 다음과 같이 bcrypt로 해싱했습니다.

const bcrypt = require('bcrypt');
(async () => {
  const hashedPassword = await bcrypt.hash('11111111', 10);
  console.log(hashedPassword);  // 이 해시된 값을 DB에 직접 저장
})();

2) 회원가입 로직에서 비밀번호 해싱 추가

회원가입 기능이 있다면, 비밀번호를 데이터베이스에 저장하기 전에 아래와 같이 해싱을 추가해주어야 합니다.

const hashedPassword = await bcrypt.hash(password, 10);
// 이후 hashedPassword를 DB에 저장

4. 결론

비밀번호를 검증할 때에는 평문 비밀번호가 아닌 해시된 비밀번호를 사용해야 합니다. 만약 해싱을 잊으면, bcryptInvalid password 오류를 반환합니다.

0개의 댓글