Express中的会话管理
我有一个Express中的会话管理,express,passport.js,express-session,Express,Passport.js,Express Session,我有一个express应用程序,其中包含express session、session file store和passport。当用户首次登录时,服务器会创建一个sessionID,并创建相应的会话文件。但是,我有以下问题: 当User Agent或curl使用connect.sid发送cookie时,我无法在会话存储中查找保存的ID。我查看了会话文件存储文档,找不到任何方法或方法。有办法吗 是否有办法在“注销”请求时销毁或删除会话 编辑 正如@jfriend00所建议的,我认为最好提供更多的上
express
应用程序,其中包含express session
、session file store
和passport
。当用户首次登录时,服务器会创建一个sessionID
,并创建相应的会话文件。但是,我有以下问题:
User Agent
或curl
使用connect.sid
发送cookie
时,我无法在会话存储中查找保存的ID。我查看了会话文件存储
文档,找不到任何方法或方法。有办法吗authserver.js
// session options
const sessOpts = {
genid: (req) => uuid(),
store: new sessionFS(),
secret: _secret,
resave: false,
saveUninitialized: true
};
// mws
authservice.use(initLogger);
authservice.use(exprSession(sessOpts));
authservice.use(bodyParser.json());
authservice.use(bodyParser.urlencoded({ extended: false }));
authservice.use(expSanitizer()) // must follow preceeding line
authservice.use(corsHandler);
authservice.disable('x-powered-by');
authservice.disable('etag');
// session mws
authservice.use(passportInst.initialize());
authservice.use(passportInst.session());
passport.use(new passportLocal(
(username, password, done) => {
//console.log('In local');
mongoHelpers.connect((cerr, db) => {
if(!!cerr) return done(cerr);
mongoHelpers.findUser({
username: username,
password: password
}, db, (err, usrs) => {
if(!!err) return done(err);
if(!!!usrs) return done(null, false);
//if(!validateUser(usrs[0], userSchema)) return done(null, false);
//console.log('local: ' + usrs.toString());
//console.log(usrs);
return done(null, usrs[0]);
});
});
}
));
passport.serializeUser((user, done) => {
console.log('In serializer');
if(!!!user) {
done(new Error("User cant be undefined in serializeUser"), null);
//console.log("user is null");
}
done(null, user._id); // mongo auto id
});
passport.deserializeUser((id, done) => {
console.log('In Dcserializer');
console.log(id);
});
以下是设置passport LocalStrategy
的方法:
passport\u strategies.js
// session options
const sessOpts = {
genid: (req) => uuid(),
store: new sessionFS(),
secret: _secret,
resave: false,
saveUninitialized: true
};
// mws
authservice.use(initLogger);
authservice.use(exprSession(sessOpts));
authservice.use(bodyParser.json());
authservice.use(bodyParser.urlencoded({ extended: false }));
authservice.use(expSanitizer()) // must follow preceeding line
authservice.use(corsHandler);
authservice.disable('x-powered-by');
authservice.disable('etag');
// session mws
authservice.use(passportInst.initialize());
authservice.use(passportInst.session());
passport.use(new passportLocal(
(username, password, done) => {
//console.log('In local');
mongoHelpers.connect((cerr, db) => {
if(!!cerr) return done(cerr);
mongoHelpers.findUser({
username: username,
password: password
}, db, (err, usrs) => {
if(!!err) return done(err);
if(!!!usrs) return done(null, false);
//if(!validateUser(usrs[0], userSchema)) return done(null, false);
//console.log('local: ' + usrs.toString());
//console.log(usrs);
return done(null, usrs[0]);
});
});
}
));
passport.serializeUser((user, done) => {
console.log('In serializer');
if(!!!user) {
done(new Error("User cant be undefined in serializeUser"), null);
//console.log("user is null");
}
done(null, user._id); // mongo auto id
});
passport.deserializeUser((id, done) => {
console.log('In Dcserializer');
console.log(id);
});
exprSession
,它是expresssession
和passport.session()
的一个实例。这两个实例引用的是同一个对象吗李>
user
集合,以查找匹配的密码对或用户名和密码。这种查找也在链的另一个中间件中完成。第二个中间件是多余的吗|id
返回。如果这是会话ID,是否有方法使用它来销毁会话李>
maxAge
或expires
也可以删除/取消设置以前设置的cookie,这是一种好的做法吗(或者甚至是一般做法)如果这个问题有点复杂,我很抱歉。我对这些中间件相当陌生。使用
快速会话
,如果您登录并且有会话,您可以调用req.session.destroy()
。为此,您不需要自己查找会话,express session中间件会为您这样做,并将会话置于req.session
中,您可以在其中访问它(如果使用会话登录)。@jfriend00我确实有另一个问题,使用查找功能(我想)更容易解决。正如我提到的,我使用的是passportjs,在passport.deserializeUser((id,done)=>{//id是什么,如果这是会话id,如何查找和删除它?})
。我希望它能解释。然后,请为该问题写一个新问题或编辑您的问题,使其成为您的特定问题。passport和express session被广泛使用,所以只要我们知道您的实际根本问题是什么,您的任何问题都可能已经在某个地方讨论过了。@jfriend00编辑了原始帖子。