bcrypt란?
평문을 암호문으로 바꾸는 과정. 암호화 알고리즘을 통해 원래 정보를 변조시켜 복호화할 수 없다면 정보를 알 수 없게 만드는 라이브러리
bcrypt는 솔트(salt) 와 비밀번호를 해시로 암호화 해서 저장한다.
bcrypt 사용법
npm i bcrypt
model 파일에서 해시된 비밀번호를 저장하고, db에 저장된 비밀번호와 로그인 시 입력한 비밀번호를 compare해서 로그인이 가능하게 한다.
// userSchema가 save 되기 전에 password를 bcrypt.genSalt 함수를 이용해 db에 저장한다.
const saltRounds = 10;
userSchema.pre("save", function (next) {
let user = this;
if (user.isModified("password")) {
// salt 생성
bcrypt.genSalt(saltRounds, function (err, salt) {
if (err) return next(err);
bcrypt.hash(user.password, salt, function (err, hash) {
if (err) return next(err);
user.password = hash;
next();
});
});
} else {
next();
}
});
// 로그인 시 해시된 비밀번호와 compare
userSchema.methods.comparePassword = function (plainPassword) {
return new Promise((resolve, reject) => {
bcrypt.compare(plainPassword, this.password, (err, isMatch) => {
if (err) {
return reject(err);
}
resolve(isMatch);
});
});
};