1
我有一個表單,用戶可以在其中創建一個帶有可選密碼字段的房間。我只想在密碼字段包含某些內容(非空)時才保存密碼。我有散列中間件散列密碼,然後將其保存到mongodb。即使密碼字段爲空,它也會保存一個散列值。我試圖添加一個條件來檢查是否只有一個值才能繼續散列,但這似乎不起作用。只有當密碼存在時才存儲密碼哈希值
這是帖子:
exports.postCreateRooms = function(req, res, next) {
req.assert('workspace', 'Please enter a board name').notEmpty();
var errors = req.validationErrors();
var enableVideo;
if (errors) {
req.flash('errors', errors);
return res.redirect('/dashboard');
}
var url = uuid.v4();
var room = new Room({
roomUrl: url,
roomName: req.body.workspace,
owner:req.user._id,
ownerEmail:req.user.email,
dateCreated: Date(),
lastUpdated: Date(),
users: [req.user._id]
});
if (req.body.password != ''){
room.password = req.body.password;
}
room.save(function(err) {
if (err) {
return next(err);
}
res.redirect('/board='+room.roomUrl);
});
};
這裏是我的散列中間件:
roomSchema.pre('save', function(next) {
var room = this;
if(room.password){
bcrypt.genSalt(10, function(err, salt) {
if (err) {
return next(err);
}
bcrypt.hash(room.password, salt, null, function(err, hash) {
if (err) {
return next(err);
}
room.password = hash;
next();
});
});
}
});
你需要在'bcrypt.genSalt()'調用前加上一個'return',否則就會面臨雙重回調的問題。 – gyamana
它掛着...添加下一個作品,但現在它不通過if函數,因此不會散列密碼。 –
在brcyp.genSalt()調用之前添加return會有訣竅!謝謝@gyamana –