expressjs 护照 mongodb session 未找到

expressjs passport mongodb session not found

我用的是passport.js + express.js + mongodb,我觉得是一种很低级的服务器认证方式,但是,我发现有些奇怪。

要设置 session 存储:

  // CookieParser should be above session
  app.use(cookieParser());
  app.use(cookieSession({ secret: 'secret' }));
  app.use(session({
    resave: true,
    saveUninitialized: true,
    secret: pkg.name,
    store: new mongoStore({
      url: config.db    
    })
  }));

  // use passport session
  app.use(passport.initialize());
  app.use(passport.session());

然后,每当我登录时,我都会检查我的 mongodb,但找不到 sessions collection。

有人知道为什么吗?

谢谢。

我可能错了,但据我了解,由 passport js 创建的用户会话未存储在数据库中。当会话开始时,它将转到您的数据库并获取用户信息。如果用户信息存在,那么它会将会话附加到 req.user。除非您在初始化会话后添加自定义功能来存储会话信息,否则它实际上不会将会话保存到数据库中。也许 this article 会帮助您更多地了解正在发生的事情。如果您想保存会话信息,可以创建一个模型来接受存储在 req.user 中的信息,并在会话开始后将其保存。

您正在使用 cookie-session module and the express-sesion 模块。这两个中间件互相争斗。两个模块都实现会话,您只需使用两者之一。 cookie-session 将会话存储在 cookie 中,在您的情况下 express-session 会将您的会话存储在 Mongo 中。 看你的申请要求。

关于您的问题的详细信息 是,由于它是中间件堆栈中的第一个,cookie-session 正在创建一个 req.session 属性。然后 express-session 代码看到这个 属性 已经存在并决定什么都不做。这就是 Mongo 没有显示会话的原因。