У меня есть приложение express
с express-session
, session-file-store
и passport
.Когда пользователь впервые входит в систему, сервер создает sessionID
и создает соответствующий файл сеанса.Однако у меня возникают следующие проблемы:
- Когда
User-Agent
или curl
отправляет cookie
с connect.sid
, я не могу найти хранилище сеансов для сохраненного идентификатора,Я изучил session-file-store
документы и не смог найти никаких методов или способов сделать это.Есть ли способ? - Есть ли способ уничтожить или удалить сеанс по запросу 'logout`?
Edit Как и предположил @ jfriend00, я подумалЛучше предоставить больше контекста.Как упоминалось ранее, у меня есть около 3 промежуточного программного обеспечения для сессии.Вот как они монтируются:
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 LocalStrategy
:
passport_strategies.js
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
, которые являются экземплярами express-session
и passport.session()
.Оба эти экземпляра ссылаются на один и тот же объект? - Я ищу коллекцию
user
в каждой стратегии аутентификации на предмет соответствия пары или имени пользователя и пароля.Этот поиск также выполняется в другом промежуточном программном обеспечении.Является ли второе промежуточное программное обеспечение избыточным? | - В методе сериализации пользователя я передаю идентификатор Монго.В десериализации я получаю идентификатор сессии обратно как
id
.Если это идентификатор сеанса, есть ли способ использовать его для уничтожения сеанса? - Когда пользователь выходит из системы, рекомендуется ли (или вообще вообще ли это делать) удалять / сбрасывать ранее установленный файл cookie, даже если установлено
maxAge
или expires
?
Я прошу прощения, если вопрос кажется несколько запутанным.Я довольно новичок в этом промежуточном программном обеспечении.