Socket.io - 如何向客户端发送auth错误?

时间:2017-08-16 09:36:59

标签: node.js socket.io

我在服务器端使用<dependency> <groupId>avalon-framework</groupId> <artifactId>avalon-framework-impl</artifactId> <version>4.3</version> <exclusions> <exclusion> <groupId>xml-apis</groupId> <artifactId>xml-apis</artifactId> </exclusion> <exclusion> <groupId>xml-apis</groupId> <artifactId>xmlParserAPIs</artifactId> </exclusion> </exclusions> </dependency> ,在客户端使用socket.io。 我有以下自定义身份验证功能:

socket.io-client

如果身份验证失败,我希望客户端知道这一点。 但是,它不会触发我客户端的io.use(function(socket, next){ console.log("Query: ", socket.handshake.query); // return the result of next() to accept the connection. if (socket.handshake.query.foo == "bar") { return next(); } // call next() with an Error if you need to reject the connection. next(new Error('Authentication error')); });

不可能吗?如果是的话,我做错了什么?我是否需要在服务器或客户端做更多的事情?

1 个答案:

答案 0 :(得分:0)

我只知道我的问题是什么,我使用根管理器(/usr/bin/python/scripts )定义了一个中间件:

io

在客户端,我正在连接到const SocketIO = require('socket.io'); const io = SocketIO.listen(server.listener, options); io.use((socket, next) => next(new Error('ERRRRROR'))); 命名空间:

/devices

在每个连接上,在我尝试将中间件设置为已定义的命名空间manager = io.connect('http://192.168.33.34:7650/devices'); manager.on('error', (e) => console.log(e)); 之前,error回调从未执行过:

/devices

然后const nspDevices = io.of('/devices'); nspDevices.use((socket, next) => next(new Error('ERRRRROR'))); 回调在客户端成功执行。

我希望这会对你有所帮助。