-
[2019.06.04] 오늘의 TIL- 암호화 bcrypt.compare가 무조건 false로 나던 문제개발 블로깅/오늘의 TIL 2019. 6. 4. 18:24
회원가입 및 로그인 기능을 작업하던 중..
회원가입 할 때 입력한 패스워드를 bcrypt 라이브러리를 이용하여 해싱 시키고 데이터베이스에 저장을 하였다.
var password = '1q2w3e4r'; var hash_password = await bcrypt.hash(password, 10); // 비동기 함수
그리고 로그인 시, 로그인을 위해 입력한 패스워드랑 DB에 저장되어있던 해싱된 패스워드가 유효한 지 확인하기 위해
bcrypt.compare()함수를 이용하였다.
var check = await bcrypt.compare('1q2w3e4r',/* 해쉬된 패스워드*/);
새로 입력한 패스워드 '1q2w3e4r'가 기존에 해싱시킨 패스워드와 같으면 true, 아니면 false를 반환한다.
그런데, 정상적인 패스워드인데도 불구하고 계속 false가 나오는 것이다.
문제의 원인
해싱까지는 잘 되나, 데이터베이스에 저장할 때, 해싱된 패스워드를 저장하는 칼럼 타입이 varchar(50)이였다.
varchar(50) 길이보다 해싱된 패스워드 길이가 더 길어서, DB에 저장할 때 해싱 값이 짤린것이다...
그러니 로그인 유효성 검사할 때, 짤린 해싱값을 가져오니 당연히 false가 나올 수 밖에...
alter table 테이블명 modify password varchar(100)
패스워드 칼럼 타입 길이를 적당하게 늘려준 뒤, 다시 데이터베이스에 저장 후 로그인 시도를 해봤더니 정상적으로 동작한다.
반응형'개발 블로깅 > 오늘의 TIL' 카테고리의 다른 글