2

我正在使用express-session并且有一个辅助函数,我的路由中间件都在调用它,它实际上会检查req.session对象上的属性,如果不存在则返回 401。

所以我现在有这个:

module.exports.hasAccessToken = function(req, res, next) {
  if(req.session.accessToken){
    next();
  } else {
    res.status(401).send();
  }
};

connect-mongo用作我的商店,登录时我正在添加一个accessToken属性以req.session使用从 OAuth 提供程序返回的值。

如果我控制台注销登录req.session后的内容,我会看到

Session {
  cookie:
   { path: '/',
     _expires: Tue Apr 05 2016 08:58:10 GMT+0100 (GMT Daylight Time),
     originalMaxAge: 3000,
     httpOnly: true },
  accessToken: '<token_value_here>' }

当会话过期并且我的函数在上面发送 401 时,我看到了

Session {
  cookie:
   { path: '/',
     _expires: null,
     originalMaxAge: null,
     httpOnly: true } }

req.session当非登录用户访问应用程序时,也会评估上述内容。因此,我试图找到一种方法来判断用户是否以前登录过并且他们的会话 cookie 是否已经过期。express-session我想知道我是否可以以某种方式使用浏览器 cookie 集合,但是由于使用了 httpOnly ,我将无法访问由生成的那个。

所以我最终想做的是在响应正文中添加一些额外的信息,其中res.status(401).send();包含某种原因代码来说明为什么发送 401,例如“SESSION_EXPIRED”,但我首先需要找出一种知道的方法用户之前是否有过期的会话。

这有意义吗,这可以实现吗?

谢谢

4

0 回答 0