2015-12-22 4 views
1
router.post('/checkuser', function(req, res) { 

    var db = req.db; 

    var userEmail = req.body.useremail; 
    var password = req.body.password; 

    var collection = db.get('usercollection'); 

    collection.find({ "email": userEmail }, function (err, doc) { 
     if (err || !doc) { 
      res.redirect("login"); 
     } else { 
      res.redirect("userlist"); 
     } 
    }); 
}); 

Этот код должен проверить учетные данные для входа в MongoDB и вернуть false, если значения не совпадают.Проверка регистрационные данные против MongoDB не работает

Но он всегда перенаправляется в файл userlist.jade. Может кто-нибудь объяснить, почему?

+0

Почему вы не добавляете пароль в состояние? любая причина? – Dineshaws

+1

Вам нужно использовать 'findOne',' find' вернет курсор. И, как предложила @Dineshaws проверка пароля, может быть хорошей идеей. – Jaco

ответ

1

Ваш код всегда перенаправляет к файлу userlist.jade из текущей логики в функции обратного вызова: с find() метод возвращает курсор, если заявление проверяет, есть ли ошибка ИЛИ не возвращаются курсор с согласованный документ, поэтому переменная doc является курсором, который всегда возвращается, есть ли совпадение или нет. Используйте вместо этого метод findOne():

collection.findOne({"email": userEmail}, function(err, user) { 
    if(!err && user && user.password === password) { 
     res.redirect("userlist"); 
    } 
    else { res.redirect("login"); } 
}); 
+0

Я также настоятельно рекомендую использовать 'bcrypt.hashSync (password, salt)' для хеширования пароля и использования 'bcrypt.compareSync (password, user.password)' для сравнения предоставленного пароля с сохраненным хэшем пароля. – Jaco

+0

@Jaco Отличное предложение, настоятельно рекомендовал бы это тоже! – chridam

Смежные вопросы