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

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();
  });
}

但是由于某种原因,会出现此错误:
/node_modules/express-session/index.js:269
  req.session.touch();
              ^
TypeError: Object #<Object> has no method 'touch'

我似乎找不到其他在线出现此错误的人,因为touch()是用于表达 session 的内置功能。请帮忙?我的快速 session 版本是1.9.3。

最佳答案

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

因此,只需确保您没有在代码中的任何地方显式覆盖req.session

关于node.js - req.session没有方法 'touch'吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27592423/

10-16 19:48