【问题标题】:socket.io room authorisationsocket.io 房间授权
【发布时间】:2015-03-11 15:25:16
【问题描述】:

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

显然,我可以使用中间件函数和一些身份验证数据检查连接到命名空间的授权,但除非这些房间在连接启动时已经在socket.rooms 中,否则我不知道如何检查,当一个套接字加入一个房间,不管它是否被授权,然后如果它没有被授权就强制它离开房间。

是否有join 事件或等效的方法?就像一个命名空间的 connection 事件,但对于一个房间。

编辑

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

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

这样当一个套接字想要监听一个特定的数据流时,它只是emitsa“加入”事件,带有一些关于它想加入哪个房间的数据,而我在服务器上处理整个事情?

【问题讨论】:

    标签: node.js websocket socket.io authorization


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-05-13
      • 1970-01-01
      • 2019-09-04
      • 2019-03-02
      • 2011-12-02
      • 2017-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多