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

标签 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:

最佳答案

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/

相关文章:

node.js - 是否可以在没有 Node 服务器的情况下构建 Electron 桌面应用程序?

node.js - 带有 Async/Await 的 NodeJS 中类似分类帐的顺序条目

javascript - 如何通过套接字io连接每秒发送一行sql?

javascript - 这个 if/else Javascript 函数有什么问题?

node.js - localtunnel 和 CORS 无法正常工作

javascript - 如何在 SocketIO 中调用确认函数?

javascript - 在使用socket.io时获取express.js中的当前用户?

node.js - Nodejs - 处理和发送多部分请求,

node.js - 如何导出具有多个静态方法的类

javascript - React : NextJS, 我需要 2 台服务器进行部署吗?