Frontend/react

bcrypt 정보 암호화

dddzr 2022. 6. 26. 20:28

 

 

암호화 하지 않고 데이터 전송시 DB관리자는 사용자의 비밀번호를 볼 수 있음.

민감정보를 암호화할 필요 있음

 

1. bcrypt 다운로드

npm install bcrypt --save

 

2. pre함수 생성

2-1. bcrypt 사이트에서 bycrpt.getSalt함수 복사

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

 

bcrypt

A bcrypt library for NodeJS.. Latest version: 5.0.1, last published: a year ago. Start using bcrypt in your project by running `npm i bcrypt`. There are 3374 other projects in the npm registry using bcrypt.

www.npmjs.com

 

2-2.  pre('save', func) 함수

User.js

pre함수는 index.js에 register router에 user.save 이전에 실행되는 함수.

파라미터인 next에 index.js의 save함수가 들어감.

const mongoose = require('mongoose');
const bcrypt = require('bcrypt');
const saltRounds = 10; //sort의 글자 수

const userSchema = mongoose.Schema({
    name: {
        type: String,
        maxlength: 50,
        required: true
    },
    email: {
        type: String,
        trim: true,
        unique: 1
    },
    password: {
        type: String,
        minlength: 5,
        required: true
    },
    role: {
        type: Number,
        default: 0
    },
    image: String,
    token: {
        type: String
    },
    tokenExp:{
        type: Number
    }
})


userSchema.pre('save', function(next){//mongoose의 pre함수 이용, 파라미터 next(다음에 실행 할 함수)
    var user = this;
    
    //이 함수는 user정보가 수정되어 저장될때도 실행됨.
    if(user.isModified('password')){//비밀번호가 변경 되었을 때만 비밀번호 암호화한다는 조건절
        bcrypt.genSalt(saltRounds, function(err, salt) {//saltRounds길이의 salt 생성
            if(err) return next(err) //next 함수 실행
            bcrypt.hash(user.password, salt, function(err, hash) {
                if(err) return next(err)
                user.password = hash
                next()
            });
        });
    }else {
    	next()
    }
})

const User = mongoose.model('User', userSchema) //모델이름, 스키마

module.exports = {User} //다른 곳에서도 쓸수 있도록 export

 

index.js

3. 테스트

postman으로 req보낸 후 mongoDB에서 암호화된 데이터 확인

위는 암호화 안한것, 밑은 한것

 

테스트 방법은 아래 링크 참고!

https://sumni.tistory.com/46

 

POST method route 생성(body-parser, postman)

1. body-parser client에서 sever로 보낸 클라이언트 POST request data의 body로부터 파라미터를 편리하게 추출해주는 node.js 모듈 근데 express쓰면 이거 따로 안써도 된다고함. 1-1. body-parser이용 npm inst..

sumni.tistory.com