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
- localhost:3000 にアクセス
created user
- localhost:3000/check
Encrypted password is true
user.verifyPassword('PassPassPass')
の部分のパスワードを変更すると Encrypted password is false
となって動作していることがわかります。
備考
model.verifyXXXXX()
のXXXXはUppercase のフィールド名で対象のフィールドをチェックできます