Управление сессиями в Express - PullRequest
0 голосов
/ 27 мая 2018

У меня есть приложение express с express-session, session-file-store и passport.Когда пользователь впервые входит в систему, сервер создает sessionID и создает соответствующий файл сеанса.Однако у меня возникают следующие проблемы:

  1. Когда User-Agent или curl отправляет cookie с connect.sid, я не могу найти хранилище сеансов для сохраненного идентификатора,Я изучил session-file-store документы и не смог найти никаких методов или способов сделать это.Есть ли способ?
  2. Есть ли способ уничтожить или удалить сеанс по запросу '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);

});
  1. Теперь есть две сессии exprSession, которые являются экземплярами express-session и passport.session().Оба эти экземпляра ссылаются на один и тот же объект?
  2. Я ищу коллекцию user в каждой стратегии аутентификации на предмет соответствия пары или имени пользователя и пароля.Этот поиск также выполняется в другом промежуточном программном обеспечении.Является ли второе промежуточное программное обеспечение избыточным? |
  3. В методе сериализации пользователя я передаю идентификатор Монго.В десериализации я получаю идентификатор сессии обратно как id.Если это идентификатор сеанса, есть ли способ использовать его для уничтожения сеанса?
  4. Когда пользователь выходит из системы, рекомендуется ли (или вообще вообще ли это делать) удалять / сбрасывать ранее установленный файл cookie, даже если установлено maxAge или expires?

Я прошу прощения, если вопрос кажется несколько запутанным.Я довольно новичок в этом промежуточном программном обеспечении.

...