2016-11-21 5 views
1

新しいデバイスからユーザーがログインした場合、以前のセッションをMongoStore/sessionStoreから削除したいと考えています。 MEANJSは 接続-Mongoの新しいデバイスからログインした場合に以前のセッションを削除するMEANJS

をMongoDBのにセッションを格納する

エクスプレス・セッションを使用しています。私はそれを検索しましたが、dbからセッションのリストを取得するソリューションを見つけることができませんでした。ここ

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 
    }) 
    })); 
}; 
+0

よくあるセッションを削除すると、デバイスを交換するたびに共通のセッションでログインする必要があります。同時にブラウザと携帯電話からログインしています –

+0

@MedetTleukabiluly okどこで共通のセッションコードを削除する必要がありますか? –

答えて

1
これは動作するはず

を助けてください、少なくともそれは、これは私が希望助けを借りて

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

このソリューションを確認していただき、ありがとうございます。ありがとうございました –

+0

@ZaidIqbal注:**デバイスを変更するたびにユーザーが再ログインする必要があります** –

+0

userSession._id、_idは定義されていませんこの行にエラーが発生しています –

1

最後にあるasync.eachを使用します

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

ための良い出発点です問題を解決できるか ここに私のコードは

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' }); 
    } 
    }); 
}; 
関連する問題