我是node.js的新手,我尝试在Express中实现最简单的授权。我想将req.session.userId
设置为来自数据库的用户ID。我可以使用简单的表单和发布请求从数据库中获取用户ID,但我无法设置req.session.userId
。对我来说最难以理解的事情 - 为什么有时req.session有效,有时则不然。
我的解释代码。
在 app.js :
配置细分:
app.use(express.session({secret: 'asdads', key: 'sid', cookie: { maxAge: 600000, httpOnly: false }}));
之后我用:
处理POST请求app.post('/login', routes.authorize);
我的路线。授权:
exports.authorize = function(req, res){
if(req.body){
var login = req.body.login;
var password = req.body.password;
//gET USER FROM DATABASE
db.getUser(login, password, function(err, results){
//ensure that results is correct
console.log(results);
if(err){ res.send("User not found", 500); return;}
//PLACE WITH BUG :)
req.session.userId = results[0].id;
});
}
res.render('login', { title: 'Express!' });
}
我想我不能在这个地方设置req.session.userId因为我通过POST访问这里。如果我是对的,请帮助我访问此地点的req.session
。
提前致谢。
答案 0 :(得分:1)
我认为问题是您在db.getUser()
完成之前立即回复了请求。 IIRC Express会话中间件在发送响应时保存会话更改,因此请尝试这样的事情:
exports.authorize = function(req, res) {
if (!req.body)
return res.render('login', { title: 'Express!' });
var login = req.body.login;
var password = req.body.password;
db.getUser(login, password, function(err, results) {
if (err)
return res.send("User not found", 500);
req.session.userId = results[0].id;
res.render('login', { title: 'Express!' });
});
}