Нужно запретить пользователю делать несколько подключений по вебсокетам к ресурсу. Чтоб работало по принципу: один пользователь - одно соединение
Как это сделать?
Сначала хотел создать объект с ip адресами и записывать в него id сокета.
При авторизации проверять наличие ip и в случае обнаружения принудительно закрывать соединение.
Что-то вроде:
io.set('authorization', function (handshakeData, callback) {
var address = handshakeData.address.address;
// если в сессиях есть ip
if (sessions[address]) {
io.sockets.sockets[sessions[address]].disconnect();
callback(null, true);
} else {
callback(null, true);
}
});
io.sockets.on('connection', function (socket) {
var address = socket.handshake.address.address;
sessions[address] = socket.id; // добавляем сессию
});
socket.on('disconnect', function () {
var address = socket.handshake.address.address;
delete sessions[address]; // удаляем сессию
});
Но узнал, что это может создать проблемы у тех соединений где используется
NAT
Плохо понимаю NAT. Возможно ли как-то идентифицировать NAT. Там же вроде порт еще есть какой-то "особенный", что дает даже не уникальному id уникальность