WEB 만들기 -9 Bcrypt을 이용해 비밀번호 암호화
본문 바로가기
WEB

WEB 만들기 -9 Bcrypt을 이용해 비밀번호 암호화

by KyeongMin 2021. 1. 18.
728x90
반응형

Bcrypt 라이브러리를 이용해서 암호화 시킬예정이다. 

회원가입한 내용의 비밀번호를 암호화 해야하는이유는 우리가 postman을 이용해서 보낸 부분을 보게되면  

저렇게 비번이 노출이 되어있다. 그것을 해결하기 위해서는 

암호화해서 데이터베이스에 저장하는 형식을 취한다. 

 

 우선 bcrypt를 다운받아야합니다. 

npm install bcrypt --save

를 입력해서 다운해주세요. 

 

req.body에 우리가 비번을 넣었는데 그것이 몽고디비에 올라가기전에 암호화를 해야한다. 

그래서

 

우리가 index.js 부분에 save 전에 처리를 해주면 됩니다. 

 

일단 유저 모델로 가서 

const bcrypt = require('bcrypt');

 

선언하고 

userSchema.pre('save',function(next){

    //비밀 번호를 암호화 시키기

    next()

})

 

이렇게 해서 쓸건데 그전에 bcrypt사이트에 들어가서 

www.npmjs.com/package/bcrypt

 

bcrypt

A bcrypt library for NodeJS.

www.npmjs.com

사용방법이 나옵니다. 

bcrypt.genSalt(saltRounds, function(err, salt) {

    bcrypt.hash(myPlaintextPassword, salt, function(err, hash) {

        // Store hash in your password DB.

    });

});

이것을 쓸것인데 복사해와서 

const saltRounds = 10 // 열자리를 라운드처리하는것

이걸 써주고 제일위에다가

 

userSchema.pre('save',function(next){

    var user = this;

    //비밀 번호를 암호화 시키기

//우리가 이메일이나 이름 바꿀때 마다 비번이 암호화된다면 낭비이니까

 

if(user.isModified('password')){

    bcrypt.genSalt(saltRoundsfunction(errsalt) {

        if(errreturn next(err)// 오류가 나면 이곳으로 

        bcrypt.hash(this.passwordsaltfunction(errhash) {//암호화된 비번

            // Store hash in your password DB.

            if(errreturn next(err)

            user.password =hash //성공하면 암호화된 비번으로 바꿈

            next()//되돌아가기

        })

    })

    }

})

 

 

이렇게 쓰면됩니다. 

USer.js 부분은 이렇습니다. 

const mongoose  = require('mongoose');
const bcrypt = require('bcrypt');
const saltRounds = 10 // 열자리를 라운드처리하는것

const userSchema = mongoose.Schema({
    name : {
        type : String,
        maxlength : 50
    },
    email : {
        type  : String,
        trim : true,
        unique : 1 // 혹시나 띄어쓰기 한경우 띄어쓰기 안되게 
    },
    password : {
        type : String,
        minlength : 5
    },
    lastname : {
        type : String,
        maxlength : 50
    },
    role : {
        type : Number,
        default : 0 // 1 이면 관리자, 0이면 사용자 이렇게 사용 
    },
    image : String,
    token : {
        type : String
    },
    tokenExp : {
        type : Number
    },// 유효 기간 설정
})

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) {//암호화된 비번
            // Store hash in your password DB.
            if(err) return next(err)
            user.password =hash //성공하면 암호화된 비번으로 바꿈
            next()//되돌아가기
        })
    })
 }else{
     next()
 }
})

const User = mongoose.model('User',userSchema)
module.exports = {User};// 이모델을 다른곳에서 사용 하기위해서 

포스트 해주고 확인해보면 

암호화 된것을 볼수 있습니다. 

728x90
반응형

댓글