2015-01-14 2 views
0

На моем сайте мне нужна форма, в которой администратор организации может сбросить пароль пользователя. В идеале, когда это сбрасывается, я хотел бы удалить все распознанные сессии для этого пользователя из моего RedisStore, в котором хранятся данные сеанса для экспресс-регистрации и паспорта. Кто-нибудь понял способ сделать это?Очистить все сеансы для одного пользователя

ответ

0

Вы можете быстро найти элементы по ключу из Redis, но поскольку данные, необходимые для идентификации правильных сеансов, находятся в значениях, которые вам нужно пройти через все ключи и посмотреть, какие из них принадлежат данному пользователю.

Вы можете хранить идентификаторы сеансов для заданий по имени пользователя при входе в систему, а затем, когда вам нужно удалить сеанс, вы просто получите ключи из списка и удалите их, а затем удалите список.

var client = redis.createClient(); 
// Add the session ID to a set (if not there already) 
passport.use(new LocalStrategy({passReqToCallback: true}, function (req, username, password, cb) { 
    // Do normal login stuff first. 
    // RedisStore adds 'sess:' to session ID when making it a key 
    client.sadd("sessions:" + user.username, "sess:" + req.session.id); 
    cb(null, user); 
})); 

Затем удалить сеансы:

var deleteSessions = function(username, cb) { 
    client.smembers("sessions:" + username, function(err, sessionIds) { 
    if (sessionIds.length === 0) return cb(); 
    // Delete all sessions 
    client.del.apply(client, sessionIds); 
    // Delete the set containing now deleted session IDs 
    client.del("sessions:" + username); 
    cb(); 
    }); 
}; 
Смежные вопросы