我正在尝试在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'。客户端如何检测到它被拒绝访问?
谢谢,
扬
答案 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
})
})