req.session没有方法'触摸'?

jos*_*lle 4 session connect node.js express

我正在尝试使用express-session和connect-redis来存储用户会话.目前,在用户登录后,我返回req.sessionID,然后每当用户想要向api的安全部分发出请求时,他/她必须提供会话ID.然后,身份验证中间件返回到redis并检查会话是否存在,如果存在,则将当前会话替换为存储在Redis中的会话.

function isLoggedIn(req, res, next){
  var session_id = req.body.session_id;
  if (!session_id){
    res.send(401, {status: 0, message: "Not authorized"});
    return;
  }
  console.log(req);
  sessionStore.get(session_id, function(err, session){
    if(err){
      res.send(401, {status: 0, message: "Not authorized"});
      return;
    }
    req.session = session;
    req.sessionID = req.body.session_id;
    return next();
  });
}
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,这个错误出现了:

/node_modules/express-session/index.js:269
  req.session.touch();
              ^
TypeError: Object #<Object> has no method 'touch'
Run Code Online (Sandbox Code Playgroud)

我似乎无法在网上找到任何有这个错误的人,因为touch()是一个内置的功能来表达会话.请帮忙?我的快速会话版本是1.9.3.

Joh*_*ett 9

我遇到了同样的错误.似乎如果您来自快速cookie会话,则可以设置req.session = {/* some arbitrary session object */}.显然,req.session在实例上有一些表达需求的方法.

因此,请确保您没有明确覆盖req.session代码中的任何位置.

  • 您只需要覆盖会话上有意义的属性:`req.session.user = {/* ... */}` (2认同)