Bcrypt пароль сравнения не показывает результаты - PullRequest
0 голосов
/ 22 января 2019

Я столкнулся со странной проблемой.У меня есть оператор if внутри bcrypt.compare(), который вообще не запускается.

Пример

bcrypt.compare(req.body.password, data.password, function (err, result) {

    if (!result || err) {
        res.status(422).json({
            message: "Wrong Password",
            status: false,
            statusCode: 422
        })
    }

});

const otherData = await findOne({
    x : req.body.x
})

if(otherdata.x == "dummy") {

    return res.status(200).json({
        message: "wohhooo"
    })
}

Когда я отправляю неверный пароль в request body, он долженответить message: "wrong password"

Но он пропускает этот оператор if внутри bcrypt.compare() и отвечает message: "wohhoo"

В консоли я вижу, Error: Can't set headers after they are sent. с ошибкой, указывающей на returnвыписка внутри bcrypt.compare

1 Ответ

0 голосов
/ 22 января 2019

[bcrypt.compare] 1 - это асинхронная функция, поэтому ваша программа выполняет res.status(200).json({message: "wohhooo"}) до bcrypt.compare

// Quick Fix
bcrypt.compare(req.body.password, data.password, function (err, result) {
    if (!result || err) {
        return res.status(422).json({
            message: "Wrong Password",
            status: false,
            statusCode: 422
        })
    } else {
        const otherData = await findOne({
            x: req.body.x
        })
        if (otherdata.x == "dummy") {
            return res.status(200).json({
                message: "wohhooo"
            })
        }
    }
});

Ссылка: Что за чертовщина

...