Prevenire socket.join ("room") lato client, ascoltando la stanza privata in uscita

1

Sto sviluppando un'applicazione con Socket.IO che deve essere autenticata se l'utente può entrare in una stanza.

Lato client:

var socket = io('http://<?php echo $_SERVER['HTTP_HOST'];?>:3000');
socket.on('connect', function() {
    var req = [current_user_id,secret_hash];
    socket.emit('join', req);
});

Il server ascolta le richieste di join dei client, accede a un database MySQL e valuta se l'utente può unirsi o meno al canale hash richiesto:

        ...
        if (rows.length == 1) {
            socket.join(request[1]); //join on channel ID which is request[1] cell of array
        }
        //if not authorized, does not allow joining.
        ...

Ho due domande:

1) Non voglio consentire il joning diretto del canale da parte del client. I client non devono essere in grado di avviare socket.join ("room"). Come posso bloccare quelle richieste? Il server è l'unico a cui interessa assegnare le stanze.

2) C'è un modo per ascoltare l'evento "l'utente lascia il suo ID canale privato"?

Grazie.

    
posta Mario Villani 03.01.2015 - 02:12
fonte

1 risposta

7

La libreria socket.io sul lato client non ha la capacità di .join() di una stanza. Quella capacità è solo nella libreria lato server (perché è lì che vengono mantenute le stanze) e quindi l'unico posto in cui può essere effettivamente elaborato.

Quindi, l'unico modo per entrare in una stanza è creare il tuo messaggio per una richiesta di adesione da un client a un server ed elaborare quel messaggio sul server per conto di un determinato client che ti permette di fare qualsiasi tipo di controllo che vuoi prima che qualsiasi cliente possa entrare in una particolare stanza. In quanto tale, dovresti essere sicuro nel modo in cui lo stai già facendo.

Allo stesso modo, ci sono solo due modi in cui un cliente lascia una stanza. Il primo è quando elaborate il vostro messaggio e chiamate .leave() lato server in modo da poter certamente monitorare ogni volta che accade poiché è il vostro codice sul lato server che chiama .leave() . L'altro modo in cui un cliente lascia una stanza è quando il client si disconnette e puoi anche monitorare i disconnessi nel server. Come con .join() , il client non può chiamare direttamente .leave() in modo da non doversi preoccupare di ciò.

    
risposta data 03.01.2015 - 04:57
fonte

Leggi altre domande sui tag