Bcrypt로 비밀번호 암호화 하기

이연중·2021년 4월 19일
0

Node.js

목록 보기
8/14

저번에 POSTMAN으로 회원가입을 해 데이터베이스에 올려 저장된 것을 보면, 비밀번호가 그대로 노출되어 있는 것을 알 수 있음.

이는 안전하지 않은 상태이며, Bcrypt를 이용해 비밀번호를 암호화 해 데이터베이스에 저장해 보려한다.

Bcrypt 설치


npm install bcrypt --save

Bcrypt를 이용한 비밀번호 암호화 순서


  1. Register Route로 가기(index.js에 '/register' post 부분)
  2. index.js에서 유저 정보를 데이터베이스에 저장하기 전 비밀번호 암호화
    1. User.js에서
    2. salt 생성
    3. salt를 이용해 해시값 생성
    4. 비밀번호에 해시값 저장(암호화)

코드


User.js

const bcrypt=require('bcrypt');
const saltRounds=10; //10자리 솔트

//user 스키마 생성 부분 생략

//유저 정보 저장 전에 암호화 
userSchema.pre('save',function(next){
    //userSchema 객체
    var user=this;
    
    //다른 유저 정보가 아닌 패스워드 변경시에만 암호화 시키도록 함
    if(user.isModified('password')){
        //비밀번호 암호화
        //솔트 생성
        bcrypt.genSalt(saltRounds,function(err,salt){
            //에러 발생 시, index.js에 있는 save 메서드 내부 수행
            if(err) return next(err);
            //솔트를 이용해 해시값 생성
            bcrypt.hash(user.password,salt,function(err,hash){
                if(err) return next(err);
                //유저 비밀번호에 암호화 된(해싱) 값 할당
                uesr.password=hash;
                //index.js에 있는 save 메서드 내부 수행
                next();
            });
        });
    } 
    //패스워드가 아닌 다른 정보를 변경시에는
    else{
        //index.js에 있는 save 메서드 내부 수행으로 넘어감
        next();
    }
});

//이하 생략

POSTMAN을 이용한 확인



암호화 된 값이 데이터베이스에 저장되었음을 알 수 있음

참고

www.inflearn.com/course/따라하며-배우는-노드-리액트-기본

profile
Always's Archives

0개의 댓글