DB에 비밀번호를 그대로 저장하면 보안상의 문제가 있을 수 있기 때문에

Bcrypt로 암호화하여 저장하도록 한다.

 

 

https://www.npmjs.com/package/bcrypt

 

bcrypt

A bcrypt library for NodeJS.

www.npmjs.com

위 주소에서 사용방법을 친절히 설명해주고 있다.

 

 

Bcrypt 설치
npm install bcrypt --save

 

 

bcrypt example
bcrypt.genSalt(saltRounds, function(err, salt) {
    bcrypt.hash(myPlaintextPassword, salt, function(err, hash) {
        // Store hash in your password DB.
    });
});

bcrypt.genSalt() 는 salt를 생성하는 함수이며 saltRounds를 인자로 받고 있다.

satlRoutds가 높을수록 높은 해싱 라운드가 수행된다.

 

생성된 salt는 bcrypt.hash()에 전달되어 비밀번호 암호화가 진행된다.

 

 

bcrypt 암호화
// models/User.js

const bcrypt = require('bcrypt')
const saltRounds = 10

userSchema.pre('save', function(next){ // user정보를 저장하기전에 실행
    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 // hash 된 비밀번호로 교체
            next() // 돌아감
            });
        });
    } else {
        next()
    }

})

user 정보가 저장되기 전에 비밀번호를 암호화 하도록 하였다.

비밀번호가 수정됐을 때에만 bcrypt 함수가 실행되어 암호화 된다.

 

 

 

DB에서 확인해보면 위가 암호화를 안했을 때이고 아래가 bcrypt로 암호화 했을 때이다.

비밀번호가 암호화 된것을 확인 할 수 있다.

 

 

+ Recent posts