[英]req.session don't set with post request
我在node.js中是newby,我嘗試在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
。
提前致謝。
我認為問題在於您在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!' });
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.