Средний стек: Bcrypt не хэширует мой пароль - PullRequest
0 голосов
/ 30 ноября 2018

Соединение работает правильно, я могу опубликовать нового пользователя и отредактировать его.Теперь я хочу использовать bcrypt для «шифрования» пароля в моем 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();
});

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Это должно сделать вашу работу:

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();
    });
});
0 голосов
/ 30 ноября 2018

Вы забыли назначить вновь сгенерированный hash паролю этого пользователя.Это не делает это автоматически для вас.

Вы должны сделать что-то подобное после того, как получили hash и перед созданием объекта User.

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

newUserData.password = hash;

Кроме того, вызывать bcrypt.compareSync здесь, как это бессмысленно, и вам, вероятно, следует использовать асинхронную версию в случае хеширования, потому что операция довольно дорогая, и вы не хотитезаблокировать ваш главный поток этим.

...