2015-11-16 3 views
2

Я интересно близко(выхода из системы/выйти)всех пользовательских сеансов в nodeJS.NodeJS выход из системы всех пользовательских сеансов

req.logout() закрывает только текущую сессию пользователя. Но для моей панели безопасности я хочу добавить опцию, чтобы закрыть ВСЕ сеансов пользователя. Как я могу это сделать?

Я использую MEAN.JS framework. С passport.js библиотека и MongoDB сохранить сессии:

// Express MongoDB session storage 
app.use(session({ 
    saveUninitialized: true, 
    resave: true, 
    secret: config.sessionSecret, 
    cookie: { 
     maxAge: 15778476000, 
     httpOnly: true, 
     secure: false 
    }, 
    key: 'sessionId', 
    store: new mongoStore({ 
     db: db.connection.db, 
     collection: config.sessionCollection 
    }) 
})); 

Большое спасибо.

+0

Если вы не используете сеансы для других целей помимо аутентификации, вы можете просто очистить свой 'sessionCollection' с помощью команды MongoDB' sessionCollection.remove ({}) '. Это заставит весь активный сеанс закрыться и вывести всех пользователей. –

+0

@LeonidBeschastny Но тогда все вышли из системы? Я думаю, что OP только хочет выйти из текущего пользователя? –

+1

Я бы сохранил userId (Mongo, uuid, ...) внутри сеанса и, следовательно, также в вашем MongoDB. Затем удалите все сеансы в вашем MongoDB с этим конкретным идентификатором (почти то, что сказал @LeonidBeschastny). –

ответ

2

Использование connect-mongo, то userId сохраняется внутри строки в MongoDB в сессий коллекции:

{ 
    "_id" : "J6fsgZ4d1zKp31ml1MRm18YCdlyhvce-", 
    "session" : "{\"cookie\":{\"originalMaxAge\":15778475958,\"expires\":\"2016-05-17T23:47:27.301Z\",\"secure\":false,\"httpOnly\":true,\"path\":\"/\"},\"passport\":{\"user\":\"56420a5a8c6601ce29bbd1c1\"}}", 
    "expires" : ISODate("2016-05-17T12:48:22.049Z") 
} 

Наконец, я использую этот код, чтобы удалить все свои сессии:

var mongoose = require('mongoose'), 
Schema = mongoose.Schema, 
Session = mongoose.model('Session', new Schema(), 'sessions'); 


exports.signoutAllSessions = function(req, res) { 
    var socketio = req.app.get('socketio'); 
    var userId = req.user.id; 
    var filter = {'session':{'$regex': '.*"user":"'+userId+'".*'}}; 

    req.logout(); 
    res.redirect('/'); 

    Session.remove(filter,function(err,data){ 
     socketio.sockets.to(userId).emit('user.logout'); 
    }); 
}; 

и А.Н. Маршрут API вызовет этот метод.

Смежные вопросы