프로젝트 1 - Bcrypt

⭐프로젝트 1 - Bcrypt

📕Bcrypt

Bcrypt 라는 라이브러리를 이용해서 비밀번호를 암호화 할 것이다

우리가 저번에 포스트맨을 통해서 정보를 전달했는데 암호화가 되어있지 않기때문에

DB를 관리하는 사람이 비밀번호를 볼 수 있다

그렇게 되면 위험하니 암호화를 해서 DB에 저장되도록 만드는 것이다

npm install  bcrypt --save

우선 bcrypt 라이브러리를 다운받자

현재 signup 라우트에서는 바디에서 받아온 정보를 바로 save 하고 있다

그러므로 save하기 전에 암호화를 해야한다

models 폴더에 User.js 파일을 열어보자

여기서 mongoose의 메소드를 사용할 것이다

📘코드 작성

현재 userSchema라는 스키마가 있으니 아래의 코드를 작성하자

1 const bcrypt = require('bcrypt')
2 const saltRounds = 10
3 
4 userSchema.pre('save', function(next){
5     var user = this;
6 
7     if (user.isModified('password')){
8         bcrypt.genSalt(saltRounds, function (err, salt) {
9             if(err) return next(err)
10             bcrypt.hash(user.password, salt, function (err, hash){
11                 if(err) return next(err)
12                 user.password = hash
13                 next()
14             })
15         })
16     } else {
17			next()
18     }
19 })

갑자기 너무 많은 부분이 생겨 어려울수 있지만 하나씩 차근차근 설명하겠다

📗코드 설명

  1. 단순히 bcrypt를 사용하기 위해 작성한 코드이다

  2. bcrypt 홈페이지에 들어가면 비밀번호를 암호화하는 방법이 나와있다
    방법은 salt를 이용해서 비밀번호를 암호화 한다
    그러려면 salt를 먼저 생성해야하고 saltRounds는 salt가 몇글자인지 정하는 것이다

  3. .pre는 몽고db 메소드인데 'save'하기 전에 실행한다고 생각하면 된다
    세이브하기 전에 원하는 코드가 끝나면 넘어가야하기 때문에 next를 매개변수로
    넣은것이다

  4. 10번 코드에서 user.password 부분이 있는데 암호화가 되지 않은 비밀번호를
    의미한다
    이 부분에서 사용하기 위해서 받아오는 것이다

  5. 비밀번호가 수정되었을 때에만 아래의 코드를 실행하게 하는 것이다
    예를 들어 이메일이나 다른 것들이 수정되었을 때에도 비밀번호를 암호화 하는것은
    불필요한 일이기 때문이다

  6. salt를 만드는 부분이다

  7. 에러가 난다면 에러를 리턴하고 종료한다

  8. 에러가 다지 않는다면 암호화를 진행하는 부분이다

  9. 9번과 동일하다

  10. 비밀번호를 암호화하는 부분이다

이렇게 위와 같은 코드이다

자 그럼 포스트맨을 이용해서 암호화가 되고있는지 확인해보도록 하자


데이터가 정상적으로 DB에 들어가지긴 하였다

몽고 DB로 들어가서 암호화가 제대로 되었는지 확인해보자

처음에는 암호화가 되지 않은 상태로 비밀번호가 들어갔었는데

코드를 수정한 후에는 사진처럼 비밀번호가 암호화 된 것을 볼 수 있다

좋은 웹페이지 즐겨찾기