Получить список сеансов из sessionStore и уничтожить предыдущие сеансы пользователя NodeJS

Мне нужно получить список сеансов из sessionStore(MongoStore) и удалить предыдущий сеанс входа в систему. Я использую экспресс-сессию для хранения сессий в БД.

var userId = req.query.userid;
  if (!userId)
    return res.status(400).send({
      message: errorHandler.getErrorMessage('No user found in input request')
    });

  var store = req.sessionStore;
  var sessionsColl = store.db.collection('sessions');

  sessionsColl.find({
    'session.passport.user': userId,
    '_id': { '$ne': req.sessionID }
  }, function (err, userSessions) {
    console.log(userSessions);
    if (userSessions !== null && typeof userSessions._id !== 'undefined') {
      store.destroy(userSessions._id, function (err, dat) {
        console.log(dat);
      });      
    }
  });

Но в объекте userSessions я получаю объект вместо коллекции, и я не мог понять, как я могу получить список сеансов из объекта userSessions

ответ объекта userSessions


person Zaid Iqbal    schedule 22.11.2016    source источник


Ответы (2)


Наконец, с небольшим количеством я смог бы решить проблему Вот мой код

    exports.logoutFromPreviousDevices = function (req, res) {
  var userId = req.query.userid;
  if (!userId)
    return res.status(400).send({
      message: errorHandler.getErrorMessage('No user found in input request')
    });

  var store = req.sessionStore;
  var sessionsColl = store.db.collection('sessions');

  sessionsColl.find({
    // 'session.passport.user': userId,
    // we are tryin to remove all sessions, you can leave current
    // '_id': { '$ne': req.sessionID }
  }, function (err, userSessions) {
    if (userSessions !== null) {
      userSessions.toArray(function (a, sessionsData) {
        sessionsData.forEach(function (element, index) {
          var data = JSON.parse(element.session);
          if (element._id !== req.sessionID && req.query.userid === data.passport.user) {
            store.destroy(element._id, function (destroyerr, dat) {
              if (destroyerr)
                return res.status(400).send({
                  message: errorHandler.getErrorMessage(destroyerr)
                });
              res.jsonp({ status: 'Previous session deleted' });
            });
          }
        });
      });
    } else {
      res.jsonp({ status: 'No session found' });
    }
  });
};
person Zaid Iqbal    schedule 22.11.2016

Приведенный ниже код решает мою проблему.

var store = req.sessionStore;    
for(var sid in store.sessions){ 
    var ses = JSON.parse(store.sessions[sid]);    
    if(ses.passport.user.username==core_id) {         
        store.destroy(sid, function (err, dat) {                    
        });       
    }
}
person Sunil    schedule 23.08.2018