在套接字之间共享会话。(从所有活动选项卡中注销用户)

4
我正在使用node.js express框架构建简单的学习聊天应用程序。但是我有一个问题。如果用户有多个活动选项卡,并在其中一个选项卡上注销,则我希望关闭其他选项卡的连接并重定向到登录页面。但我遇到了一个问题。即使用户已经注销,其他套接字会话也没有更改(我正在使用passport.socketio包,因此我在socket.handshake.user中有当前用户)。我做错了什么吗?提前致谢。
2个回答

5

如果您有n个不同的选项卡,实际上就是n个不同的套接字。实现您所需的一种方法是使来自特定用户的所有套接字加入单个房间

io.on('connection', function (socket) {
    socket.join(socket.handshake.user.id);
    // rest of your code
}

在注销代码中,向该特定聊天室发出一个名为“logout”的事件。
io.sockets.in(socket.handshake.user.id).emit('logout')

现在在客户端,您可以编写一个“logout”事件监听器,以重定向到您想要的位置。

谢谢。所以我需要在控制器上访问我的套接字吗? - Pavel
是的,在您的控制器中也需要使用io对象。 - az7ar

0
在您的应用程序中,您将需要浏览所有打开的套接字,找到匹配的用户名并手动终止它们。

但是我该如何处理注销?我是通过http来实现的。 - Pavel

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