2015-12-17 3 views
0

Я пытаюсь установить функцию обновления для профилей пользователей в приложении Node.JS с хэш-паролями, используя модуль bcrypt-nodejs. Он работает при входе в систему, но когда я обновляю профиль, он обновляет объект пользователя с помощью обычного текста (т. Е .: я печатаю «текст» для пароля, db показывает «текст»). Я хотел бы хэш-пароль при обновлении профиля. Как я могу это исправить?NodeJS Обновление пользователя Bcrypt - Пароль не получает хешированный

Ниже мой код контроллера:

exports.editUser = function(req, res) { 
// user edit form set to findonendupdate 
User.findByIdAndUpdate({ _id: req.params.user_id, randString: req.body.randString }, req.body, function(err, user) { 

    if (err) 
    res.send(err); 
    res.json({ data: user }); 
}); 
}; 

Для справки это код модели пользователя, который работает с новой регистрацией пользователя:

passport.use('local', new LocalStrategy(
    function(username, password, callback) { 
    User.findOne({ username: username } , function (err, user) { 
    if (err) { return callback(err); } 

    // No user found with that username 
    if (!user) { return callback(null, false); } 

    // Make sure the password is correct 
    user.verifyPassword(password, function(err, isMatch) { 
     if (err) { return callback(err); } 

    // Password did not match 
     if (!isMatch) { return callback(null, false); } 

    // Success 
     return callback(null, user); 
    }); 
    }); 
} 
)); 

ответ

2
User.findByIdAndUpdate({...}, req.body, function(err,... 

Здесь вы получаете пароль в req.body и сообщить ему, чтобы он обновлял его напрямую, как есть (обычный текст).

Вам нужно хэш его и затем обновить

// retrieve the password field 
var password = req.body.password; 

// update it with hash 
req.body.password = bcrypt.hashSync(password);  

// then update 
User.findByIdAndUpdate({...}, req.body, function(err,... // then update 
+0

Он работал отлично. Спасибо тебе за это :). –