Я пытаюсь создать функцию входа / регистрации в моем веб-приложении, которая позволяет пользователю входить в систему и регистрироваться в базе данных.
В API регистрации нет ничего плохого, насколько я знаю, потому что этоможете добавить пользователя в мою базу данных.
// зарегистрировать API
let sql = `INSERT INTO AUTHENTICATION (name, email, password) \
VALUES (?, ?, ?)`;
myDB.query(sql, [req.body.name, req.body.email, bcrypt.hashSync(req.body.password, 8)],
(error, results) => {
if (error) {
return res.status(500).send("There was a problem registering the user.")
} else {
let sql = "SELECT * FROM AUTHENTICATION WHERE email = ?"
myDB.query(sql, [req.body.email], (error, rows) => {
if (error) {
return res.status(500).send("There was a problem getting user")
} else {
//change rows.email to rows.id to be more secure
let token = jwt.sign({ email: rows.id }, config.secret, {
expiresIn: 86400
});
res.status(200).send({ auth: true, token: token, user: rows });
}
})
}
})
Здесь у меня проблема, потому что compareSync всегда возвращает false.
// loginAPI
let sql = "SELECT * FROM AUTHENTICATION WHERE email = ?";
myDB.query(sql, [req.body.email, req.body.password], (error, results) => {
if (error) {
console.log(error);
res.status(500).send('Error on the server')
} else {
if (!results) {
return res.status(404).send('No user found.');
} else {
//compare password from client side and hash password in database.
let checkPassword = bcrypt.compareSync(req.body.password, results[0].password);
console.log(checkPassword);
if (!checkPassword) {
//if password doesn't match
return res.status(401).send({
auth: false, token: null
});
} else {
//password matched
let token = jwt.sign({ id: results.id }, config.secret, {
expiresIn: 86400 // expires in 24 hours
});
res.status(200).send({ auth: true, token: token, user: results });
}
}
}
})
Я думаю, в этой части он всегда возвращает false
let checkPassword = bcrypt.compareSync(req.body.password, results[0].password);
console.log(checkPassword);