2017-03-09 6 views
0

パスワードをハッシュして保存しようとすると、何らかの理由で新しいパスワードがデータベースに保存されません。私はMongoDB、NodeJS、パスポートを使用して、ユーザーがパスワードを変更できるようにしています。Bcryptパスワードを保存していませんか?

保存投稿
UserSchema.pre('save', function(next) { 
    var user = this; 
    var SALT_FACTOR = 5; 
console.log('trying to save the password') 

    if (!user.isModified('password')) return next(); 

    bcrypt.genSalt(SALT_FACTOR, function(err, salt) { 
    if (err) return next(err); 

bcrypt.hash(user.password, salt, function(err, hash) { 
    if (err) return next(err); 
    user.password = hash; 
    next(); 
}); 
}); 
}); 

:やや

app.post('/reset/:token', function(req, res) { 
    async.waterfall([ 
    function(done) { 
     User.findOne({ resetPasswordToken: req.params.token, resetPasswordExpires: { $gt: Date.now() } }, function(err, user, next) { 
     if (!user) { 
      req.flash('error', 'Password reset token is invalid or has expired.'); 
      return res.redirect('back'); 
     } 


     user.password = req.body.password; 
     user.resetPasswordToken = undefined; 
     user.resetPasswordExpires = undefined; 
     console.log('password' + user.password + 'and the user is' + user) 

    user.save(function(err) { 
    if (err) { 
     console.log('here') 
     return res.redirect('back'); 
    } else { 
     console.log('here2') 
    req.logIn(user, function(err) { 
     done(err, user); 
    }); 

    } 
     }); 
     }); 
    }, 

答えて

0

が再構築、それを。あなたはこのようなビットをあるuser.jsファイルを持っていると思いますので、モデルにして、ユーザーの更新機能を移動します(例:モデル/ user.jsの):あなたができるあなたのルート/アプリのファイルに続いて

var mongoose = require('mongoose'); 
var bcrypt = require('bcrypt'); 
var db = mongoose.connection; 

var UserSchema = mongoose.Schema({ 
    email: { 
     type: String 
    }, 
    password: { 
     type: String, 
     required: true, 
     bcrypt: true 
    } 
    // more fields etc 
}); 

var User = module.exports = mongoose.model('User', UserSchema); 

module.exports.updateUser = function(newUser, userId, callback) { 
    if (newUser.password != "" && newUser.password != undefined) { 
     bcrypt.hash(newUser.password,10,function(err,hash){ 
      if (err) throw err; 
      newUser.password = hash; 
      var upsertData = newUser.toObject(); 
      delete upsertData._id; 
      User.update({_id: userId}, upsertData, {upsert:true}, callback); 
     }); 
    } else { 
     var upsertData = newUser.toObject(); 
     delete upsertData._id; 
     delete upsertData.password; 
     User.update({_id: userId}, upsertData, {upsert:true}, callback); 
    }; 
} 

私はあなたが、とにかくやっていると思うユーザモデルが含まれる(例えばルート/ user.jsの):このような

var User = require('../models/user'); 

し、それを使用します。

var newUser = new User({ 
    password: password, 
    field: value, 
    field: value, 
    field: value etc 
}); 
User.updateUser(newUser, userId, function(){ 
    // rest of your code 
}); 

あなたが再を持ってその方法ユーザーに関係なく更新する機能あなたが渡すフィールドの数の

あなたのbcryptの使用と鉱山は事実上同じです。私。そのドキュメントから

bcrypt.genSalt(saltRounds, function(err, salt) { 
    bcrypt.hash(myPlaintextPassword, salt, function(err, hash) { 

bcrypt.hash(myPlaintextPassword, saltRounds, function(err, hash) { 

は同じですhttps://www.npmjs.com/package/bcrypt

関連する問題