Ошибка Object.bcrypt.compareSync: строка не определена. Есть ли рабочее решение? - PullRequest
0 голосов
/ 09 ноября 2019

В моем отрендеренном шаблоне nunjucks я сформировал его так, чтобы он принимал имя пользователя и пароль, которые будет вводить пользователь. После нажатия кнопки «Отправить» он должен выполнить поиск в базе данных в моем экспресс-файле javascript, чтобы узнать, что это за пользователь. набрано в базе данных.

Однако я продолжаю получать сообщение об ошибке.

Я убедился, что нет орфографических ошибок или чего-то в этом роде, но я не уверен, как исправитьэта ошибка. Это мое сообщение об ошибке:

Ошибка: недопустимые аргументы: не определено, не определено в Object.bcrypt.compareSync

Мой экспресс-код, который выполняет обработку кнопки отправки.

let usersdb = new DataStore({filename: __dirname + '/usersDB', autoload: true});
app.post('/user', express.urlencoded({extended:true}), function (req, res) {
    console.log(req.body);
    let username = req.body.username;
    let password = req.body.password;
    // Find user
    let auser = usersdb.find(function (user) {
        return user.username === username
    });
    if (!auser) {// Not found
        res.render("loginError.njk");
        return;
    }
//**** Its like the error happens on this line below*****
    let verified = bcrypt.compareSync(password, auser.passHash);
    if (verified) {

        let oldInfo = req.session.user;
        req.session.regenerate(function (err) {
            if (err) {
                console.log(err);
            }
            req.session.user = Object.assign(oldInfo, auser, {
                loggedin: true
            });
            res.render("welcome.njk", {user: auser});
        });
    } else {
        res.render("loginError.njk");
    }
});

Мой ожидаемый результат заключается в том, что, когда пользователь вводит свое имя пользователя и пароль на странице отображаемых nunjucks (и его действительные имя пользователя и пароль (действительные значения, которые были найдены в базе данных пользователей)), он будет отображать страницу приветствия.

Если он не найден, он должен отобразить страницу logerror.njk

Большое спасибо, ребята!

1 Ответ

0 голосов
/ 10 ноября 2019

Это очевидно из вашей verified переменной. Проверьте данные вашего перехода на bcrypt.compareSync. Также проверьте, добавили ли вы select: false к свойству пароля в вашей схеме, если вы используете mongoose / mongodb

...