cookie-session maxAge未设置,始终在1年后到期

时间:2017-03-01 23:53:45

标签: node.js express cookies passport.js session-cookies

我正在撰写快速应用,并且正在使用Cookie会话来保留Google OAuth2 Passport会话(只需一个电子邮件地址,没有其他内容)。我完成了OAuth身份验证并创建了两个cookie,但是,这两个cookie始终设置为从身份验证之日起1年后到期。我尝试过的事情:

  • 我已经检查了电子邮件地址的大小(以KB为单位),并且它可以存储在cookie中。
  • 我尝试过maxAge& maxage作为对象键(来自另一个Stack Overflow帖子的想法,有人提到maxAge无效。)
  • 我已检查会话是否正确保留。从console.logs开始,会话设置为:{ passport: { user: bill@bill.com }}
  • req.cookieOptions中未设置任何内容。但是,这两个Cookie都显示在req.cookies中。

这里有一些代码:

var cookieParser = require('cookie-parser');
var session = require('cookie-session');

var expiryDate = new Date(Date.now() + 60 * 60 * 1000) // 1 hour
var sessionOptions = {
  name: 'cookie_name',
  secret: 'top secret',
  cookie : { httpOnly: true, maxAge: expiryDate }
}

app.use(cookieParser());
app.use(session(sessionOptions));

app.get('/auth/provider',
  passport.authenticate('google', { scope: ['profile', 'email'] }))

app.get('/auth/google/callback',
  passport.authenticate('google'),
  function(req, res) {
    // session is set here correctly. Again, no cookieOptions, expires in 1 year.
    res.redirect('/posts');
  });

为什么cookie会话以这种方式表现?在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

根据documentation of cookie-sessionoptions对象是平的。您添加了包含值的其他键cookie

根据文档,选项应该是

var sessionOptions = {
  name: 'cookie_name',
  secret: 'top secret',
  httpOnly: true, 
  maxAge: expiryDate
}

express-session中间件期望Cookie选项位于密钥cookie下。