본문 바로가기

Web/Node.js

Node.js ) bcrypt를 이용해 패스워드 암호화하기 - 1

1. 설치

npm i bcrypt --save // 일단 설치한다.

아래의 링크를 타고가면 bcrypt 사용하는 방법에 대해 나오는데, 

www.npmjs.com/package/bcrypt#usage

 

bcrypt

A bcrypt library for NodeJS.

www.npmjs.com

 

2. 설정

다음은 bcrypt 사용에 기본적으로 필요한 코드이고, 위 페이지에서 가져왔다.

const bcrypt = require('bcrypt');
const saltRounds = 10;
const myPlaintextPassword = 's0/\/\P4$$w0rD';
const someOtherPlaintextPassword = 'not_bacon';

먼저 우리가 만든 User모델에 위의 코드를 붙혀넣기 하고, 우리가 생성한 schema의 pre메소드를 사용해서

save 메소드( => 이전 게시글 참고)가 실행되기 전에 비밀번호를 암호화하는 로직이 수행되도록 하자.

userSchema.pre('save', function(next) {  //'save' 메소드가 실행되기 전에 콜백함수를 실행한다는 뜻.
  var user = this; // this 바인딩 해주고
  if (user.isModified('password')) { //패스워드가 변경되었다면
    bcrypt.genSalt(saltRounds, function (err, salt) { // bcrypt를 통해 salt값 생성
      if (err) { 
        return next(err);
      }
      bcrypt.hash(user.password, salt, function(err, hash) { pw와 salt값을 넣어 해시값 생성
        if (err) { 
          return next(err);
        }
        user.password = hash; // 암호화된 패스워드를 저장해준다.
        next();
      });
    });
  } else {
    next();
  }
});

이 로직이 다 수행되면 결과를 save 메소드에서 받아 유저 계정을 생성하게 된다.