Node.js 기초(7) - Bcrypt로 패스워드 암호화
[Bcrypt로 비밀번호 암호화하기]
회원가입을 하면서 유저의 패스워드를 암호화하지 않고 저장하게 된다면
이런식으로 DB에서 유저의 패스워드를 알아낼 수가 있어서 매우 안전하지 않습니다.
따라서, 안전하게 저장하기 위해서는 DB에 저장하기 전에 패스워드를 암호화해서 저장해야 합니다.
이번엔 Bcrypt를 이용하여 패스워드를 암호화를 해보겠습니다.
Bcrypt로 암호화하기
목차
Install
npm install bcrypt --save
비밀번호 암호화하기
Bcrypt 사이트로 이동하여 Usage 참고
User.js 수정
const bcrypt = require('bcrypt');
const saltRounds = 10; // 값이 높을 수록 비용 소요가 큼
// mongoose의 pre 기능으로 'save' 하기 전에 function을 실행시킴
userSchema.pre('save', function(next){
var user = this;
if(user.isModified('password')){
//비밀번호를 암호화 시킴
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() // index.js의 save로 다시 돌아감
});
});
}else {
next()
}
})
1) 함수 설명을 하자면 userSchema.pre('save', function(next)
은 회원가입을 할 때 index.js의 user.save가 실행 되기 전에 function을 실행시킴
2) var user = this;
: 현재 user 정보를 나타냄
3) if(user.isModified('password'))
: 다른 정보를 수정할 때도 암호화를 하면 안되니까 password를 수정할 때만 암호화시키는 조건문
4) bcrypt.genSalt(saltRounds, function (err, salt){}
: bcrypt로 salt를 생성
5) bcrypt.hash(user.password, salt, function (err, hash)
user의 Plaintext를 salt로 암호화 시킴
6) user.password = hash
: user의 패스워드를 암호화된 Hashing값으로 변경
7) next()
: 다시 register route의 user.save로 돌아감
결과
postman을 이용하여 다음과 같은 폼으로 post를 보냄
암호화되어 저장된 모습을 확인할 수 있음
Comments