TJC*_*TJC 5 redis node.js passport.js
在我的网站上,我想要一个组织管理员能够重置用户密码的表单。理想情况下,当重置时,我想从保存 Express 和 Passport 会话数据的 RedisStore 中清除该用户的所有已识别会话。有没有人想出办法做到这一点?
您可以从 Redis 中快速按键查找项目,但由于识别正确会话所需的数据位于值中,因此您需要遍历所有键并查看哪些键属于相关用户。
您可以在登录时按用户名将会话 ID 存储到集合中,然后当您需要删除会话时,您只需从列表中获取密钥并删除它们,然后删除列表。
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);
}));
Run Code Online (Sandbox Code Playgroud)
然后删除会话:
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();
});
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2095 次 |
最近记录: |