我有一个应用程序,我想避免机器人尝试使用我的socket.io端点。
我的socket.io位于express之上:
const app = require('express')();
app.use(blockRobots);
const io = require('socket.io')(app{path: '/socket'});
如果我通过除/socket
之外的任何路径访问此服务器,则将执行中间件。
但是,对/socket
进行(GET)请求不会触发中间件。
有什么想法吗?
答案 0 :(得分:1)
在不深入研究代码的情况下,我假设socket.io
会将侦听器附加到HTTP服务器,该侦听器在Express完全处理请求之前被触发。
您可以对allowRequest
使用socket.io
选项来拒绝不需要的请求:
const io = require('socket.io')(app, {
path: '/socket',
allowRequest: (req, callback) => {
if (CHECK_FOR_ROBOT) {
return callback(null, false);
} else {
return callback(null, true);
}
}
});