显示登录的用户列表,(passportjs、会话,也许是套接字)?

Mic*_*bry 6 session login mongodb node.js facebook-login

介绍:

好的,我已经组合了一个不错的应用程序,允许用户登录(node.js、passportjs、mongodb)。现在进一步推进应用程序,我需要查看谁登录了。


理论:

所以这个想法刚刚打动了我,我认为最好的想法是传递 a connected = true,或者connected = false当用户登录时,然后注销到用户模型。


题:

我的问题是在我的应用程序中跟踪谁的会话处于活动/连接/登录状态的最佳方法是什么?它会将这些属性传递给模型吗?

是否有跟踪所有用户会话的标准方法?我不希望这是一个违反规则的自以为是的问题,但必须有一种技术方法来跟踪会话!对于这样的事情,最佳做法是什么?


试炼:

所以在这里我可以更具体地进行测试,但我忘记了在我的把手模板中我只能访问来自该用户 mongodb 模型的属性。

<div class="row">

    {{#if user.connected}}
        {{#each user.connected}}
            <li>{{this}}</li>
        {{/each}}
    {{/if}}

</div>
Run Code Online (Sandbox Code Playgroud)

以上显然行不通,因为在为该页面创建路由时,数据是这样传递的。

res.render('profile', { user : req.user });
Run Code Online (Sandbox Code Playgroud)

所以我坚持使用connected: trueconnected: false它很容易,有效,对我来说很有意义。


精致问题:

因此,根据给定的情况,我使用 express 进行路由,渲染并将响应对象传递给我的把手模板。我想创建一个模型,该模型admin = true只有该用户才能访问所有模型。

我的问题是在响应对象中如何传递所有用户的集合。它不能作为响应,我可能需要做一个 mongoDB 查询?这听起来对吗,比如

AppUser.find({ connected: true }, function (err, user) {
    console.log(user);
    res.render('profile', { user : user });
});
Run Code Online (Sandbox Code Playgroud)

类似上面的东西,我要测试它并回贴。我觉得我已经缩小了范围,那么将所有连接模型的列表传递给“res.render”以便我可以在我的模板中访问它们的最佳解决方案是什么?


编辑:所以这种作品,这是我遇到的一个问题。

我希望能够像这样呈现用户,res.render('chat', { user : req.user })但如果req.user是管理员,我也想呈现用户列表。所以在头顶上,我想传递两个对象。

AppUser.find({}, function (err, users) {
    console.log(users); 
    res.render('profile', { user: req.user, users : users }); 
});
Run Code Online (Sandbox Code Playgroud)

车把

<div class="row">

    {{#each users}}
        {{#if this.connected}}
            <li><b>Connected:</b> {{this.connected}}</li>
            {{#if this.facebook.email}}
                <li><b>Email:</b> {{this.facebook.email}}</li>
            {{else}}
                <li><b>Email:</b> {{this.local.email}}</li>    
            {{/if}}
        {{/if}}
    {{/each}}

</div>
Run Code Online (Sandbox Code Playgroud)

^^^ 有效!:) 有什么想法吗?