эти две строки
var user = ( db.collection('auth').findOne({name: req.body.username}));
var pass = ( db.collection('auth').findOne({password: req.body.password}));
представляют асинхронный код, поэтому проверки if else
не будут ждать их выполнения
, если только вы не заказали javascript
подождать
вы можете использовать async/await
, чтобы заставить код ждать, пока асинхронная часть не будет выполнена
также, вы получаете только имя пользователя, а затем получаете только пароль
поэтому, если пользователь вводит свое имя, но другой пароль, а не его правильный, и этот пароль существует в базе данных, вход в систему будет выполнен, хотя это не должно быть
, вы должны проверить имя пользователя и пароль из того же документа, чтобы избежать этого
что-то вроде этого
app.post('/auth', async function(req, res) { // note the async keyword here
try {
var user = await db.collection('auth').findOne({ name: req.body.username , password: req.body.password });
if (user && user.name == req.body.username && user.password == req.body.password) {
res.send("Credentials Match");
} else {
res.send("Wrong Credentials");
}
console.log(req.body);
}
catch (err) {
console.log('Exception >>\n', err); // log the error
res.send("Something wrong has happened while checking the credentials");
}
})
надеюсь, что это поможет