![](/img/trans.png)
[英]How to check if a string is already hashed in Node.js using crypto
[英]How to pass a hashed password in a promise before posting it to the database using a Node.js server?
在node.js服务器上,我正在使用bcrypt对用户通过POST请求接收的密码进行哈希处理,然后将该哈希存储在数据库中。 与创建散列和其他参数到数据库的保存相比,散列函数的计算所需的时间更长,因此我需要使用一个承诺在散列函数完成后执行保存。 我正在为此使用Q库,但是我不确定如何执行此操作。 我正在使用猫鼬进行数据建模。
var bcrypt = require('bcrypt');
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash(req.body.password, salt, function(err, hash) {
// Store hash in DB
});
});
});
app.post('/api/users', function(req, res) {
var newUser = new User({
email: req.body.email,
name: req.body.name,
password: hash
});
newUser.save(function(err) {
if(!err) {
return res.send({ status: 'User created' });
} else {
if(err.name == 'ValidationError') {
res.statusCode = 400;
res.send({ error: 'Bad Request' });
} else {
res.statusCode = 500;
res.send({ error: 'Internal Server Error' });
}
}
});
});
我会计算newUser变量的填充量,然后newUser.save()调用将成为then()的参数,但是如何使bcrypt哈希函数发出promise并传递哈希呢?
您可以简单地将数据库查询移至哈希的回调内部,以便在哈希回调准备就绪时将其保存。
var bcrypt = require('bcrypt');
app.post('/api/users', function(req, res) {
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash(req.body.password, salt, function(err, hash) {
var newUser = new User({
email: req.body.email,
name: req.body.name,
password: hash
});
newUser.save(function(err) {
if(!err) {
return res.send({ status: 'User created' });
} else {
if(err.name == 'ValidationError') {
res.statusCode = 400;
res.send({ error: 'Bad Request' });
} else {
res.statusCode = 500;
res.send({ error: 'Internal Server Error' });
}
}
});
});
});
});
或使用bcrypt.hashSync
的同步调用,但是在尝试使用Node时,同步不是一个好习惯。
但这可能就像password: bcrypt.hashSync(req.body.password, salt)
如果我正确理解了您的要求,则要在对密码进行哈希处理之后保存用户吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.