Node.js Passport.SocketIo-如何使用NodeJS、Express和Passport获取在线用户列表

Node.js Passport.SocketIo-如何使用NodeJS、Express和Passport获取在线用户列表,node.js,express,socket.io,passport.js,Node.js,Express,Socket.io,Passport.js,我用MongoStore完成了sessionStore,每次登录都正确执行,会话写入数据库时没有错误。我正在使用此软件包将passport与socket io对齐,但我已经查找了几个地方,了解登录后如何处理会话存储,因此它列出了哪些具有姓名的用户处于联机和脱机状态,可以告诉我一些信息吗 app.js var express = require('express'); var mongoose = require('mongoose'); var path = require('path'); v

我用
MongoStore
完成了
sessionStore
,每次登录都正确执行,会话写入数据库时没有错误。我正在使用此软件包将passport与socket io对齐,但我已经查找了几个地方,了解登录后如何处理
会话存储
,因此它列出了哪些具有姓名的用户处于联机和脱机状态,可以告诉我一些信息吗

app.js

var express = require('express');
var mongoose = require('mongoose');
var path = require('path');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var session = require('express-session');
const MongoStore = require('connect-mongo')(session);
var flash = require('connect-flash');
var logger = require('morgan');
var passport = require('passport');

var passportSetup = require('./passport-setup');

// import routes
var routes = require('./routes');

// setup express app
var app = express();
app.use(logger());

// setup connection with mongodb
mongoose.connect( process.env.MONGODB_URI || "mongodb://smachs:***@d***.mlab.com:****/****-messenger",
    (err, db)=> {
        if (err) return new Error(err);
        console.log('You can track connection, disconnect, login and logout events to create a list of online users. 
You can manage online users in RAM or you can use redis for that. Following code snippet may help you achieve your goal -

// Store userIds here
let onlineUsers = [];

io.on('connection', function (socket) {

    socket.on('login', (userTokenOrId) => {
        // store this to onlineUsers or redis
        // Other stuff
    });
    socket.on('logout', (userTokenOrId) => {
        // remove this from onlineUsers or redis
        // Other stuff
    });
    socket.on('disconnect', (userTokenOrId) => {
        // remove this from onlineUsers or redis
        // Other stuff
    });
});
var express=require('express');
var mongoose=require('mongoose');
var path=require('path');
var bodyParser=require('body-parser');
var cookieParser=require('cookie-parser');
var会话=需要(“快速会话”);
const mongostre=require('connect-mongo')(会话);
var闪存=需要(“连接闪存”);
var记录器=需要('morgan');
var passport=需要(“passport”);
var passportSetup=require('./passportSetup');
//进口路线
变量路由=需要('./路由');
//安装快捷应用程序
var-app=express();
app.use(logger());
//设置与mongodb的连接
mongoose.connect(process.env.MONGODB|u URI |”mongodb://smachs:***@d***.mlab.com:***/*****-messenger“,
(误差,db)=>{
if(err)返回新的错误(err);

log(“您可以跟踪连接、断开连接、登录和注销事件,以创建联机用户列表。 您可以在RAM中管理在线用户,也可以使用redis进行管理-

为了更好地使用,您可以管理一个对象数组来存储同一个对象的userId和socketId列表,并管理一个对象来将socketId映射到userId。通过这种方式,您可以跟踪不同浏览器/系统上的一个用户是否在线。

查看这是否有帮助?或