如何在Socket.IO中识别(取消)成功的身份验证(通过socketio-auth)?

时间:2014-12-15 13:37:19

标签: node.js authentication socket.io

我正在尝试在Socket.IO和socketio-auth的帮助下在Node.js服务器中实现Websocket身份验证。我的测试平台是一个简单的聊天,客户端需要向服务器发送密码才能获得加入权限。我是通过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');} 
})

这可以按预期工作。它是允许客户端加入的。如果我发错了密码,连接就会被拒绝。

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

谢谢,

1 个答案:

答案 0 :(得分:0)

我想出了如何检测错误:由于服务器终止了连接,因此可以直接监听“disconnect”事件:

客户端:

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

当插座因任何原因断开连接时,这当然会触发。避免这种情况的一种方法是首先监听“认证”事件,该事件在成功连接时通过适当的身份验证触发。在一个内部只是覆盖'disconnect'事件:

客户端:

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