Получить список сеансов из 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
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' });
}
});
};
Ниже код решит мою проблему.
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) {
});
}
}