如何识别Socket.IO(通过socketio-auth)成功的身份validation?

我想借助Socket.IO和socketio-auth在Node.js服务器中实现Websocket身份validation。 我的testing平台是一个简单的聊天室,客户端需要向服务器发送密码才能获得join的权限。 我通过socketio-auth来做到这一点,如下所示:

客户端:

socket.on('connect', function(){ socket.emit('authentication', {client: "client", password: "test"}); }); 

服务器端:

 require('socketio-auth')(io, {authenticate: function(data, cb){ cb(null, data.password == 'test');} }) 

这按预期工作。 因为它允许客户端join。 如果我发送了错误的密码,则连接被拒绝。

但是,我不知道如何从服务器收集数据,告诉客户端它没有权限连接。 我现在得到的是客户端控制台上的一个POST,说'400错误的请求'。 客户端如何检测到它被拒绝访问?

谢谢,

一月

我想出了如何检测错误:由于服务器杀死连接,可以简单地侦听“断开连接”事件:

客户:

 socket.on('disconnect', function(error) { console.log(error); // "io server disconnect" }) 

这当然会因为任何原因在套接字断开时触发。 避免这种情况的一种方法是首先侦听通过正确authentication成功连接时触发的“已authentication”事件。 里面的一个简单地覆盖了“断开”事件:

客户:

 socket.on('authenticated', function() { socket.on('disconnect', function(error) { // override }) })