尝试在Express.js Node.js Passport.js中查看所有已登录的用户

4
尝试查看Express Passport中所有已登录用户的所有会话,并希望能够查看当前登录的用户。最好和最快的方式是什么?
我在想,也许我可以在登录时进行此操作,并更新用户模型数据库中的“online”布尔变量为true。然后,我可以运行Users.find()上的在线=true检查...
但是,在用户注销或其会话结束时如何检查此项?
除非有一种不需要编写到数据库中的更简单的方法?
我最终希望用户保持选择退出在线查看的选项。

一个简单的方法是使用node-analytics模块。 - wrangler
1个回答

4
在使用express-session时(如果存储是默认值:MemoryStore),您可以从req对象中获取存储对象和会话数组:
var sessions = req.sessionStore.sessions

例如(对我来说)它看起来是这样的:
{
    KT29eOp9XkzFfXWdz_UVUQMI4Qf3VTxE: 
        '{"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"},
        "passport":{"user":"5a95b34b52670e19200ec48e"}}',
    WW7BAhNNBbuFUsKQ0dbalgToEEfGES8p: 
        '{"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"},
        "passport":{"user":"5a9d56a18149111cf0556991"}}' 
}             

passport属性中的user值是在MongoDB用户集合中您的用户的_id。


对我来说,用户属性就是用户的电子邮件(用户名),这样怎么样?我该如何将其更改为ID? - Idan Lottan
顺便提一下,这里指的不是在线用户,而是已登录的用户。也就是说,如果您登录并离开页面,您的会话仍将保留在会话存储中。 - Idan Lottan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接