[BCRYPT暗号化パスワードを使用[NODE.JS]

9842 ワード

以前に会員登録apiを作成した場合、パスワードはqwe 123!@#入力、戻り値とMongoDBのqwe 123!@#「」のパスワードの値が写っています.つまり、あるサイトに会員登録しておけば、DBでパスワードを確認できます.危ない!そこで今日は、Bcryptという暗号化ハッシュ関数で暗号化して保存します.

bcryptのインストールと適用


まず、bcryptをインストールします.package.jsonの依存項がきれいに加わっているのが見えます.npm install bcrypt
今回は、インストールしたbcryptを使用して暗号化パスワードの関数を作成します.
const mongoose = require('mongoose');
const bcrypt = require('bcrypt'); // bcrypt 임포트

const saltRounds = 10; // salt값을 10으로 정해주었다. 

const userSchema = mongoose.Schema({
  name: {
    type: String,
    maxLength: 50,
  },
  email: {
    type: String,
    maxLength: 50,
    trim: true, // space를 없애준다.
    // unique: 1, // 같은값은 하나만 존재할 수 있다.
  },
  password: {
    type: String,
    maxLength: 50,
  },
  role: {
    type: Number,
    default: 0, // 값이 정해지지 않았다면 디폴트로 0!
  },
  token: {
    type: String,
  },
  tokenExp: {
    type: Number,
  },
});

userSchema.pre('save', function (next) {  // userSchema가 save 되기 전에(pre) 실행할 함수function은~

  const user = this; //  this는 userSchema를 가르킨다. 

  if (user.isModified('password')) {   // password가 수정될때만 아래 코드 실행!
    bcrypt.genSalt(saltRounds, function (err, salt) {  //  saltRounds가 10인 salt를 generate 해주자. 
      if (err) return next(err); // 에러처리

      bcrypt.hash(user.password, salt, function (err, hash) {  // user.password를 salt로 변경해서 hash로 return하는 함수~
        if (err) return next(err); // 에러처리
        user.password = hash; // user.password 자리에 hash를 할당!
        next(); // pre에서 나가 다음 코드 실행!
      });
    });
   else {
       next(); // password 변경이 아닌 경우 바로 save코드 실행 
   }
  }
});

const User = mongoose.model('User', userSchema); // userSchema를 model로 만들어준다.

module.exports = { User };
上記のように、暗号化されたパスワードのコードを作成し、Postmanにパスワードを入力してregister apiを呼び出します.

return値のpasswordを調べたところ、暗号化された値が正しいことがわかりました👍🏻

リファレンス


最初はsaltが10桁だと思っていましたが、返却価格を見てみるとそうではないことに気づきました.そこで、ウィキツリーで暗号化されたパスワードの構造を検索します.まだcostが何なのか、なぜsaltとhashに分かれているのかはわかりませんが、こう見ると結構目に入ります.

John AhnのYouTubeレッスンを通じて勉強し、文章を書いた.😊