Вы не должны запрашивать пароль, вы должны запрашивать пользователя.Пароль в вашей БД предположительно зашифрован, поэтому значение, которое приходит от клиента, никогда не будет совпадать.Я предполагаю, что вы пытаетесь сравнить ноль со строкой, из которой, вероятно, происходит ваша ошибка.Тем не менее, полезно зарегистрировать ошибку, чтобы вы точно знали.
Попробуйте:
module.exports.auth = async function (req, res) {
const password = req.body.password
const email = req.body.email
console.log(email);
let user = null;
let isMatch = false;
try {
//Check the password
user = await getUserByEmail(email)
//Compare the hashed password
isMatch = await bcrypt.compare(password, user.password)
} catch (e) {
return res.status(500).json({message: 'Internal Server Error'})
}
if (isMatch) {
req.user = user;
res.redirect('/');
}
async function getUserByEmail(email) {
let query = "SELECT password FROM users where email = ? LIMIT 1";
return new Promise((resolve,reject)=> {
mysqlConnection.query(query, [email], function(error,results) {
if (error) {
return reject (error)
}
if (results.length == 1)
return resolve(results[0])
else
return resolve(null)
});
})
}}
Обновление на основе ваших комментариев.
Хорошо, я пропустил запрос;вы возвращали массив пользователей, которые соответствуют запросу, что означает просто массив из одного.В любом случае вам нужно получить фактического пользователя из этого массива.
Я обновил запрос, чтобы ограничить поиск одним пользователем (небольшой перфоманс, даже если у вас есть только уникальные адреса электронной почты), а также ваш обратный вызов запроса для возврата одной возвращенной строки, а не массива,Можно утверждать, что отсутствие пользователя должно быть reject()
вместо нулевого результата, я оставляю это решение вам.