使用express更改回调内的会话对象

时间:2014-10-04 22:01:05

标签: mysql node.js session express login

我正在使用express和mysql,我正在尝试完成登录功能。

app.post('/login', function(req, res){
   var username = req.body.username;
   var password = sha1(req.body.password);
   db.query("SELECT user_id, username FROM users WHERE username = '" + username + "' AND password = '" + password + "';", function(err, rows, fields){
       if(rows.length > 0){
           console.log("User " + username + " connected.");
           req.session.user_id = rows[0].user_id;
      }
});

});

如您所见,我对数据库进行查询,如果用户名和密码匹配,(rows.length> 0)我尝试通过在会话对象中添加他的id来登录用户。

问题是req.session只在回调中被修改,我找不到全局方式...我试图调用函数登录(id),但这也不起作用。

一点点帮助会很好,谢谢。

2 个答案:

答案 0 :(得分:0)

使用Mysql DB对用户进行身份验证的最佳方法是将passport.js添加到应用程序中。

请参阅此回购以获取完整示例:Node-Express-Passport-Mysql authentication

如果你无法让它工作,请告诉我,当我回家时,我会发布完整的代码示例。

答案 1 :(得分:0)

好的,我试过护照,但我觉得加入我的应用程序太多了,因为我做的东西很小。 我找到了一种方法来在回调后使用app.locale更改会话对象,app.locale是一个全局变量,然后立即销毁它。

编辑:这是我的表现:

            if(rows.length > 0){

                // Put the user_id and its username on a global var
                app.locals.user_id = rows[0].user_id;
                app.locals.username = rows[0].username;
                res.redirect('/login');

                console.log("User " + username + " connected.".green);
            }

当我在/ login

上发出POST请求时
        if(app.locals.user_id){
            // Change the session object
            req.session.user_id = app.locals.user_id;
            req.session.username = app.locals.username;
    }

我想有更好的方法可以做到但无论如何都可行。