【问题标题】:cookie-session maxAge is not set, always expires in 1 yearcookie-session maxAge 未设置,始终在 1 年内到期
【发布时间】:2017-07-21 12:39:26
【问题描述】:

我正在编写一个快速应用程序,并且正在使用 cookie-session 来保持 Google OAuth2 Passport 会话(只是一个电子邮件地址,没有别的)。我顺利通过了 OAuth 身份验证并创建了两个 cookie,但是,两个 cookie 始终设置为自身份验证之日起 1 年到期。我尝试过的事情:

  • 我检查了一个电子邮件地址的大小(以 KB 为单位),它在 cookie 可以存储的范围内。
  • 我尝试使用 maxAgemaxage 作为对象键(另一个 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-session 会这样?提前感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    根据documentation of cookie-sessionoptions 对象是平面的。您添加了保存值的附加键 cookie

    根据文档,选项应该是

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

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

    【讨论】:

    • 感谢您的回答。我确实检查了文档,上面的所有内容都是准确的——express-session 的配置确实有不同的合同。由于未知原因,我仍然无法正确设置 maxAge。我最终选择了 Redis 进行开发和生产,效果很好。
    猜你喜欢
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多