如果从新设备MEANJSlogin,则删除以前的会话

如果用户从新设备login,我想从MongoStore / sessionStore删除以前的会话。 MEANJS正在使用

快速会话连接-mongo

以mongodb存储会话。 我没有search它,但找不到解决scheme从数据库中获取会话列表。 请帮我这里

MongoStore = require('connect-mongo')(session), favicon = require('serve-favicon'), module.exports.initSession = function (app, db) { // Express MongoDB session storage app.use(session({ saveUninitialized: true, resave: true, secret: config.sessionSecret, cookie: { maxAge: config.sessionCookie.maxAge, httpOnly: config.sessionCookie.httpOnly, secure: config.sessionCookie.secure && config.secure.ssl }, key: config.sessionKey, store: new MongoStore({ mongooseConnection: db.connection, collection: config.sessionCollection }) })); }; 

这应该起作用,至less对你来说这是一个很好的起点

 var async = require('async'); //npm install async --save exports.removeSessionsForUser = function(req, res, next) { var userId = req.user ? req.user.id : undefined; if (!userId) return next(new Error('No user found in req. Exiting')); var store = req.sessionStore; var sessionsColl = store.db.collection('sessions'); sessionsColl.find({ 'session.user': userId, // we are tryin to remove all sessions, you can leave current // '_id': { '$ne': req.sessionID } }, { _id : 1 }, function (err, userSessions) { async.each(userSessions, function (userSession, cb) { store.destroy(userSession._id, cb); }, function(notDone) { if(notDone) return next(new Error(notDone)); res.send('ok'); }); }); } 

这使用async.each ,这是

 async.each(Array, function(item, callback) {/* iterate */}, function(error) {/* end */}); 

最后在帮助下我将能够解决这个问题这是我的代码

  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' }); } }); };