簡體   English   中英

req.session未設置為發布請求

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM