没有找到expressjs护照mongodb会话

时间:2015-04-13 07:21:56

标签: node.js mongodb session express passport.js

我使用passport.js + express.js + mongodb,我认为这是一种非常下降的方式来实现服务器身份验证,但是,我发现有些奇怪。

设置会话存储:

  // 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集合。

任何人都知道为什么?

感谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您正在使用cookie-session模块和express-sesion模块。这两个中间件正在互相争斗。两个模块都实现会话,您只需要使用其中一个。 cookie-session存储在Cookie中的会话,在您的情况下,express-session会将您的会话存储在Mongo中。 您选择哪一个符合您的应用要求。

问题的详细信息是因为它是第一个在中间件堆栈中,cookie-session正在创建req.session属性。然后express-session代码看到此属性已存在并决定不执行任何操作。这就是Mongo没有展示会话的原因。