【问题标题】:Link socket.io ID with express and passport将 socket.io ID 与 express 和 passport 关联
【发布时间】:2013-03-22 06:04:22
【问题描述】:

我的简单尝试的目标是显示在线用户列表。我的意思是显示不是 socket.io ID,而是显示用户配置文件。当授权用户连接到我的服务器时,打开 socket.io 通道,需要获取他的个人资料并向其他已连接的用户发送新用户(姓名、电子邮件等)已连接的消息。我看到了许多如何在授权范围内执行此操作的示例,但它无法处理断开连接。伪代码中我想做什么和不能做什么:

var io = require("socket.io").listen(server);
io.set("authorization", function(data, callback){
     // ... some code...
     callback(null, true);
});

io.sockets.on('connection', function (socket) {
    var UserProfile = passport.getUserProfile(socket.id) 
    io.sockets.emit('user_connected', {UserProfile: UserProfile, socketID: socket.id}); 

    io.sockets.on('disconnect', function (socket) {
         io.sockets.emit('user_disconnected', {socketID: socket.id});
    }); 

}); 

这是一个伪代码!
我的堆栈溢出了。我只想在连接中将 socket.io ID 和护照帐户链接在一起。我该怎么做?

【问题讨论】:

    标签: express socket.io passport.js


    【解决方案1】:

    我遇到了同样的问题,我的解决方案如下(希望有人能提出更好的主意):

    • 我将用户名添加到渲染调用(使用玉): res.render('chatroom', {用户名: req.user.username});
    • 在连接到客户端 (io.connect) 上的套接字后,我发出一个 使用客户端上的连接事件(socket.on('connect', function (data) { ... });
    • 在服务器上,我将用户名存储在一个对象中(clients[socket.id] = 用户名)
    • 之后,我通过访问在每个套接字消息中获取用户名 客户对象

    【讨论】:

    • 很好的答案@luschn...快速提问这行代码有效地执行了客户端[socket.id] = username 是否使用括号表示法将属性分配给对象?
    • 是的,在这种情况下你不能使用点表示法(clients.socket.id 会完全不同)。基本上它将套接字 id 作为关联数组/对象中的键,并使用用户名作为值。
    猜你喜欢
    • 2019-07-05
    • 1970-01-01
    • 2014-12-25
    • 2016-05-21
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    相关资源
    最近更新 更多