JavaScriptだけでWebサイト開発

node.js + Express + mongodb系 + React でサービスを作るメモ

mongooseでpasswordを暗号化して保存してチェックする方法

Express+mongooseでパスワードを暗号化して保存する方法

mongoose-bcrypt をインストール

npm install mongoose-bcrypt --save

app.js

ルーティングの/ でデータ登録、/checkでパスワードをチェックしてみます

app.js

var mongoose = require('mongoose'); 
const option = {
  useMongoClient: true,
};
mongoose.Promise = global.Promise;
mongoose.connect(`mongodb://localhost/nexpress`, option); 

// スキーマ定義
var Schema        = mongoose.Schema;

var userSchema = new Schema ({
  user_id   : Number,
  login     : String,
  password  : String
});

userSchema.plugin(require('mongoose-bcrypt'),{ fields: ['password'] });
var User = mongoose.model('User', userSchema);

router.get('/', function(req, res, next) {
  var user = new User();
  user.name = '山田太郎';
  user.login = 'ichi-bit';
  user.password = 'PassPassPass';
  user.save();
  res.send('created user');
});

router.get('/check', function(req, res, next) {
  User.findOne({login: 'ichi-bit'}).then((user)=>{
    user.verifyPassword('PassPassPass').then(function(value){
      console.log('Encrypted password is ' + value);
      res.send('Encrypted password is ' + value);
    });
  });
});

動作確認

$ npm start
  1. localhost:3000 にアクセス created user
  2. localhost:3000/check Encrypted password is true

user.verifyPassword('PassPassPass')の部分のパスワードを変更すると Encrypted password is false となって動作していることがわかります。

備考

model.verifyXXXXX() のXXXXはUppercase のフィールド名で対象のフィールドをチェックできます

©ichi-bit