Mean stack:Bcrypt 没有散列我的密码

Mean stack: Bcrypt is not hashing my password

连接正常,我可以等post一个新用户,编辑它们。现在我想使用 bcrypt 来 "crypt" 我 mongoDB 中的密码。我做错了什么?

在我的 app.js 文件中

我确实有“ var bcrypt = require('bcrypt');”我也参考了 mongoose、express 和它应该做的一切

代码:

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

您忘记将新生成的 hash 分配给该用户的密码。它不会自动为您执行此操作。

您应该在获得 hash 之后和创建用户对象之前执行类似的操作。

var hash = bcrypt.hashSync(newUserData.password, saltRounds);

newUserData.password = hash;

此外,像这样在此处调用 bcrypt.compareSync 是没有意义的,在散列的情况下,您可能应该使用异步版本,因为该操作非常昂贵,您不希望它阻塞主线程。

这应该可以完成您的工作:

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