gpt4 book ai didi

node.js - 仅当密码存在时才保存密码哈希

转载 作者:太空宇宙 更新时间:2023-11-03 23:33:41 25 4
gpt4 key购买 nike

我有一个表单,用户可以在其中创建带有可选密码字段的房间。仅当密码字段包含某些内容(不为空)时,我才想保存密码。我有哈希中间件,可以在将密码保存到 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();
});
});
}
});

最佳答案

支票到位后会发生什么?

据我所知,您需要在中间件中的 if block 之外进行 next() 调用,因此即使没有指定密码,它也知道要继续。

看起来像

roomSchema.pre('save', function(next) {
var room = this;

if(room.password){
return 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();
});
});
}
next();
});

关于node.js - 仅当密码存在时才保存密码哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35218825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com