连接正常工作,我可以等发布新用户,对其进行编辑。现在,我想使用bcrypt来“加密”我的mongoDB中的密码。我在做什么错了?
在我的app.js文件中
我确实有“ var bcrypt = require('bcrypt');”我也引用了猫鼬,表情和应有的一切
代码:
app.post('/api/user', (req, res) => {
res.redirect('http://localhost:4200/');
var newUserData = { username: req.body.username, password: req.body.password, mail: req.body.mail, role: "user" };
const saltRounds = 10;
var hash = bcrypt.hashSync(newUserData.req.body.password, saltRounds);
bcrypt.compareSync(newUserData.req.body.password, hash);
var user = new User(newUserData, function(err) {
});
user.save();
});
答案 0 :(得分:2)
您忘记为该用户的密码分配新生成的hash
。它不会为您自动执行此操作。
在获得hash
之后和创建User对象之前,应该执行以下操作。
var hash = bcrypt.hashSync(newUserData.password, saltRounds);
newUserData.password = hash;
此外,在此处这样调用bcrypt.compareSync
是没有意义的,在散列的情况下,您可能应该使用异步版本,因为该操作非常昂贵,并且您不希望以此阻塞主线程。
答案 1 :(得分:0)
这应该可以完成您的工作:
app.post('/api/user', (req, res) => {
res.redirect('http://localhost:4200/');
const saltRounds = 10;
var hash = bcrypt.hashSync(req.body.password, saltRounds);
var newUserData = { username: req.body.username, password: hash, mail: req.body.mail, role: "user" };
var user = new User(newUserData, function(err) {
});
user.save();
});
一种更好的(推荐)方法是异步执行:
bcrypt.hash(req.body.password, saltRounds, (err, hash) => {
if (err) {
console.log(err);
return;
}
var newUserData = { username: req.body.username, password: hash, mail: req.body.mail, role: "user" };
var user = new User(newUserData, function(err) {
});
user.save();
});
});