我使用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
集合。
任何人都知道为什么?
感谢。
答案 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没有展示会话的原因。