gpt4 book ai didi

node.js - 自定义验证器无法检查空密码

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

我正在使用 bcrypt 来哈希用户的密码。因此我有以下界面:

app.post("/user", function(req, res, next) {
// hash the password asynchronously
bcrypt.hash(req.body.password, null, null, function(err, hash) {
var newUser = new User({
username: req.body.username,
password: hash,
email: req.body.email
});
newUser.validate(function (err) {
if (err) {
logger.info("User registration aborted: " + err.toString());
return res.status(400).json(err);
} else {
newUser.save(function (err, user) {
if (err) {
return res.status(500).json(err);
} else {
console.log(user.username + " saved succesfully.");
logger.info("User " + user._id + " registered.");
return res.json(user);
}
});
}
});
});
});

用户可以输入空密码(“”),该密码也将被哈希处理。我不希望用户能够创建短于 x 且长于 y 字符的密码。因此我想使用自定义验证器来中止该操作:

UserSchema.path("password").validate(function (value) {
bcrypt.compare("", value, function(err, equal) {
console.log(this.username + ": " + value + ", " + equal);
return !equal;
});
}, "password empty");

这不起作用,空密码将被哈希处理而不会出现错误。当然,这并不能解决密码太长或太短的问题。

最佳答案

您不会将明文密码存储在 mongoDB 中,因此您无法在 UserSchema 验证过程中强制执行密码长度策略。在进行哈希/ Mongoose 方面之前,您需要这样做。例如这样的事情:

app.post("/user", function(req, res, next) {
var pw = req.body.password;
if (!pw || pw.length > max || pw.length < min) {
return res.status(400).send('Password is required and must be > x and < y...');
}

// hash the password asynchronously
// ...
});

但是,您似乎确实在这里重新发明了轮子。用户名/密码登录已经进行过多次。依赖现有的广泛依赖的实现可能比尝试推出自己的实现更好。例如:

https://www.npmjs.com/package/passport-local

关于node.js - 自定义验证器无法检查空密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30686678/

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