检查MongoDB的登录凭据不起作用

时间:2015-12-22 10:24:59

标签: javascript node.js mongodb authentication mongodb-query

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

但它总是重定向到userlist.jade文件。有人可以解释一下原因吗?

1 个答案:

答案 0 :(得分:1)

由于回调函数中的当前逻辑,您的代码始终重定向到userlist.jade文件:由于 find() 方法返回游标,因此if语句会检查是否存在错误 OR 没有匹配文档的返回游标,因此变量doc是一个游标,无论是否匹配,总是返回。请改用findOne()方法:

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