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 没有显示会话的原因。
我用的是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 没有显示会话的原因。