암호화 하지 않고 데이터 전송시 DB관리자는 사용자의 비밀번호를 볼 수 있음.
민감정보를 암호화할 필요 있음
1. bcrypt 다운로드
npm install bcrypt --save
2. pre함수 생성
2-1. bcrypt 사이트에서 bycrpt.getSalt함수 복사
https://www.npmjs.com/package/bcrypt
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에서 암호화된 데이터 확인
위는 암호화 안한것, 밑은 한것
테스트 방법은 아래 링크 참고!
'Frontend > react' 카테고리의 다른 글
Auth (인증/인가)기능 (0) | 2022.07.07 |
---|---|
로그인 기능(유저정보, 비밀번호 비교, 토큰 생성) (0) | 2022.07.05 |
비밀 정보 보호 (DB 계정 정보 보호) (0) | 2022.06.23 |
NODE MON (0) | 2022.06.23 |
POST method route 생성(body-parser, postman) (0) | 2022.06.22 |