bcryptjs 모듈사용
npm install bcryptjs --save
import * as bcrypt from 'bcryptjs';
bcryptjs 원리
- 일반적으로 비밀번호를 저장할때 1234로 저장하는데 1234로 DB에 들어가면 큰일난다 보안상 이슈가 생기기때문.
- bcryptjs는 위와같은 상황이 생기지 않기 위해서 비밀번호를 db에 insert할때 SHA256등으로 해시를 해서 이 해시값을 복호화하는 것이 아니라 사용자가 재 로그인을 할때 입력된 해시값을 DB에 있는 해시값과 비교를 하는방법이다.
- 그렇다면 유저끼리 비밀번호가 겹치면 어떡할까?
- 그럴때는 salt+해시값 이런식으로 저장하게 되면 salt값을 유저마다 부여를 해서 salt_1234 != salt2_1234 이렇게 유저끼리 비밀번호가 겹치더라도 다른 해시 값이 DB에 들어가게 된다.
사용예시
비밀번호 insert시에
const salt = await bcrypt.genSalt();
const hashedPassword = await bcrypt.hash(password, salt);
const user = this.create({ username, password: hashedPassword });
비밀번호 select 시에
const user = await this.userRepository.findOne({ username });
if (user && (await bcrypt.compare(password, user.password))) {
return '로그인 성공';
} else {
throw new UnauthorizedException('login failed');
}