socket.io房间授权

时间:2015-03-11 15:25:16

标签: node.js websocket socket.io authorization

我有一个socket.io的用例,其中,在一个单独的命名空间中,客户端可以连接到多个房间。用户需要在每个房间进行身份验证(因为可能不允许他们访问这些数据流)。

显然我可以使用中间件函数和一些auth数据来检查与命名空间连接的授权,但是除非这些房间在启动连接时已经在socket.rooms,否则我不知道如何检查一个插座加入一个房间,无论是否经过授权,如果未经授权,都会强制它离开房间。

是否有join事件或同等方式执行此操作?就像命名空间的connection事件一样,但是对于一个房间。

修改

阅读了socket.io的来源后,看来套接字加入房间时没有触发任何事件,但我可能误解了一些内容:在阅读socket.io-client的来源时,加入房间并不是系统中固有的,表明这只是可以在服务器端触发的东西。在这种情况下,我假设我必须自己管理客户的房间加入?如果这是真的,那么我可以有类似的东西:

socket.on('join', function(data) { ... });

这样当套接字想要收听某个特定数据流时,只需要emit一个"加入"事件,有一些数据,它想要加入哪个房间,我在服务器上处理整个事情?

1 个答案:

答案 0 :(得分:3)

加入房间只能在服务器上完成。客户端通常向服务器发送特定于应用程序的消息,该消息向您的应用程序指示他们想要加入特定房间,然后如果请求有效,则服务器代表用户执行该操作。

因此,您所要做的就是将所有代码路由到可以通过一个特定功能加入房间的服务器,该功能可以执行您想要执行的任何身份验证。例如,您可以简单地创建一个函数,这是您的服务器代码将套接字放入房间的唯一方式:

function joinAuth(socket, room) {
    // can do anything you want here before actually joining the room
}