我在服务器端使用<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'));
});
。
不可能吗?如果是的话,我做错了什么?我是否需要在服务器或客户端做更多的事情?
答案 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')));
回调在客户端成功执行。
我希望这会对你有所帮助。