我目前正在使用ExpressJS,我希望用户能够登录我的应用程序,因此我使用快速会话模块来执行此操作 . 我得到的问题是:我附加到req.session对象的数据不会被保存 .

所以我在resave和saveUninitialized选项设置为false时尝试了这个:

app.get('/submitLogin', [
queryCheck('username').isLength({min:6, max:14}).withMessage('Username has to be 6 to 14 characters long'),
queryCheck('password').isLength({min:8, max:20}).withMessage('Password has to be 8 to 20 characters long')
], async (req, res) => {

  if(!validationResult(req).isEmpty()) return end(validationResult(req), res)

  let {username, password} = req.query;
  let lookupResult = await usernameLookup(username);

  if(!lookupResult) return end('No user found', res)
  if(!lookupResult.validPassword(password, this.password)) return end('Invalid password', res)

  req.session.user = lookupResult;
  req.session.save(error => console.log(req.session))

  return res.json({success: true});

});

所以控制台输出req.session有用户对象 . 这不会返回一个cookie,因为它应该在我修改req.session对象时完成,显然我无法访问其他代码中的用户对象,如下所示:

app.get('/', function(req, res){
  console.log(req.session);
  res.render('index');
});

那么我决定将resave和saveUninitialized选项设置为true,并检查每个路由的会话ID是否相同 . 所以req.session.cookie对于每条路线都是一样的,所以cookie返回到我的浏览器 . 这没有解决问题:我追加到req.session的数据永远不会被保存 .