我正在使用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),但这也不起作用。
一点点帮助会很好,谢谢。
答案 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;
}
我想有更好的方法可以做到但无论如何都可行。