平均堆栈:Bcrypt未对我的密码进行哈希处理

时间:2018-11-30 15:33:53

标签: javascript node.js express encryption mean-stack

连接正常工作,我可以等发布新用户,对其进行编辑。现在,我想使用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();
});

2 个答案:

答案 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();
    });
});