- 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:
最佳答案
Socket.IO 中的
authorization
是中间件,用于处理基于 HTTP header 数据的握手过程,在 WebSocket 的情况下,该数据与第一个 HTTP 切换协议(protocol) header 一起发送。
此数据包含正常的 header 内容以及 cookie,有时用于恢复 session 。
虽然 authorization
中间件发生在实际的 WebSockets 握手过程完成之前,并且这个中间件不应该用于应用程序逻辑授权,而只能用于网络和 http 的东西(比如用于恢复 session 的 cookie,禁止的 IP 等) ).
所以我建议不要将此中间件用于应用程序逻辑,因为它实际上也是特定于协议(protocol)的(Socket.IO 使用许多协议(protocol)和通信层,如 WebSockets、XHR Long Polling、AJAX 等)。但是在成功建立连接后执行您的身份验证逻辑。
关于node.js - socket.io-client 无法获得授权失败原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11807599/