socket.io-client无法获得授权失败的原因

时间:2012-08-04 09:50:28

标签: node.js socket.io

  • socket.io@0.9.9
  • socket.io-client@0.9.9
  • express@3.0.0rc1

服务器代码:

//run with node-dev server.js
var remoteServer = io.of('/remote');
remoteServer.authorization(function(handshakeData, callback){
  return callback('unknown clientType', false);
}

服务器日志:

You can visit your app with http://localhost:3000
   info  - handshake authorized l4FzYiWpHo2d8VeoB3Zo
   warn  - handshake error unknown clientType for /remote

客户代码:

//run with node-dev client.js
var io = require('socket.io/node_modules/socket.io-client');
var client = io.connect('http://localhost:3000/remote');
client.on('connect_failed', function(reason){
  console.log('connect_failed:', reason);
});

//will call this because it's Namespace authorization
client.on('error', function(reason){
  console.log('error:', reason);
});

客户日志:

//error reason miss.
E:\Workspace\TZ\SmartDoor\client>node-dev client.js
error:

1 个答案:

答案 0 :(得分:1)

Socket.IO中的

authorization中间件来处理基于HTTP头数据的握手过程,该数据与WebSockets的第一个HTTP Switch Protocols头一起发送。

此数据包含正常的标题内容以及Cookie,有时用于恢复会话 虽然authorization中间件发生在实际的WebSockets握手过程完成之前,并且此中间件不应用于应用程序逻辑授权,但仅用于网络和http内容(如用于恢复会话,禁止IP等的cookie)。 / p>

因此我建议不要将此中间件用于应用程序逻辑,因为它实际上也是协议特定的(Socket.IO使用许多协议和通信层,如WebSockets,XHR Long Polling,AJAX等)。但是在成功建立连接后进行身份验证逻辑。