NodeJS和MySQL,处理行

NodeJS和MySQL,处理行,mysql,node.js,Mysql,Node.js,我是NodeJS的初学者,目前正在使用node、express和mysql包。我正在检查这个人是否已经注册 如果是,则应执行以下代码: req.session.user = user; req.flash('success_notification', 'You are logged in'); console.log("creating session :" ,req.session.user); 但是,authenticated在我尝试检查是否设置为true时始终保

我是NodeJS的初学者,目前正在使用node、express和mysql包。我正在检查这个人是否已经注册

如果是,则应执行以下代码:

    req.session.user = user;
    req.flash('success_notification', 'You are logged in');
    console.log("creating session :" ,req.session.user);
但是,
authenticated
在我尝试检查是否设置为true时始终保持“false”

 if (authenticated === true)
有人知道我做错了什么吗

这是我处理登录尝试的代码:

router.post('/login', function (req, res) {
    var user = req.body.username;
    var password = req.body.password;
    var authenticated = false;

    var query = "Select * from  user where username = \'" + user + "\'" + " AND pw = \'" + password  + "\'";

    connection.query(query, function (err,rows,fields) {
        if (err) console.log(err);
        else if (rows.length) {
            authenticated = true;
            console.log(authenticated);
        }
        else {
            console.log('False Password or Username');
        }
    });

    console.log(authenticated);
    if (authenticated === true) {
        req.session.user = user;
        req.flash('success_notification', 'You are logged in');
        console.log("creating session :" ,req.session.user);
    }

    res.redirect('/');    
});

这是一个回调问题

我也有同样的问题

条件
if(authenticated===true)
在查询完成之前得到验证,并且已返回,因此
authenticated
只有在其自身验证后才会变为
true

让它用于任何类型的布尔查询返回的方法是将其包含在的查询中,以创建回调函数

因此,如果将条件封装在查询中,它应该可以正常工作

router.post('/login', function (req, res) {
    var user = req.body.username;
    var password = req.body.password;
    //var authenticated = false;

    var query = "Select * from  user where username = \'" + user + "\'" + " AND pw = \'" + password  + "\'";

    connection.query(query, function (err,rows,fields) {

        var authenticated = false; //Encapsulate your authenticated variable since you won't need it outside this scope

        if (err) console.log(err);
        else if (rows.length) {
            authenticated = true;
            console.log(authenticated);
        }
        else {
            console.log('False Password or Username');
        }

        /** Moved here */
        console.log(authenticated);
        if (authenticated === true) {
            req.session.user = user;
            req.flash('success_notification', 'You are logged in');
            console.log("creating session :" ,req.session.user);
        }

        res.redirect('/');

    });

    // Moved wihin the your query
    /*
    console.log(authenticated);
    if (authenticated === true) {
        req.session.user = user;
        req.flash('success_notification', 'You are logged in');
        console.log("creating session :" ,req.session.user);
    }

    res.redirect('/');
    */

});

您当前的输出是多少?此外,您应该使用准备好的语句来构建查询。我当前的输出首先是“false”,然后是“true”。然而,在“true”出现之前,我觉得重定向是在之前执行的。请注意,您似乎正在以明文形式将用户密码存储在数据库中。正如@TimBiegeleisen所提到的,您的查询目前容易受到SQL注入的攻击。例如,有人可以将精心编制的用户名传递到代码中,并能够在您的数据库上运行查询。@ChrisForrence从好的一面来看,这些漏洞将导致更多的问题被打开,因此我们需要更多的分数:-)我意识到了风险,我还打算使用“+连接.escape()'选项以防止SQL注入,并使用bcrypt散列密码。然而,在这样做之前,我想测试我的代码是否能够与示例数据库以及硬编码的用户密码和用户名一起工作。但很明显,我不知道原因是什么。。。