4
  • socket.io@0.9.9
  • socket.io-client@0.9.9
  • 快递@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:
4

1 回答 1

1

authorizationSocket.IO 中的中间件是基于 HTTP 标头数据处理握手过程的中间件,在 WebSockets 的情况下,该数据与第一个 HTTP Switch Protocols 标头一起发送。

此数据包含正常的标头内容以及 cookie,有时用于恢复会话。
虽然authorization中间件发生在实际的 WebSockets 握手过程完成之前,而且这个中间件不应该用于应用程序逻辑授权,而只能用于网络和 http 的东西(如用于恢复会话的 cookie、禁止 IP 等)。

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

于 2013-09-11T16:41:01.080 回答