In questa serie, abbiamo imparato a conoscere i canali di Pusher, una piattaforma che ti consente di offrire ai tuoi utenti l'esperienza in tempo reale che desiderano.
I canali privati forniscono alle tue applicazioni un mezzo privato sicuro per la pubblicazione dei messaggi. La parte migliore è la facilità con cui implementare e utilizzare canali privati per le tue app. Imparerai come usarli in questo post.
Nel video precedente, abbiamo esaminato una semplice applicazione di chat che non aveva utenti e nessuna sicurezza; era solo una chat anonima. Funziona, non fraintendermi, ma possiamo fare di meglio! Quindi, in questo video, vedremo una versione leggermente diversa dell'applicazione di chat. Il front-end è per lo più lo stesso, ma il back-end è un'applicazione Laravel.
Anche se l'app è supportata da Laravel, gli stessi principi vengono utilizzati per gestire i nostri messaggi. Invece di un singolo file, ora abbiamo a ChannelsController
per gestire la nostra roba orientata ai canali e ha a invia messaggio()
metodo che gestisce le richieste di chat in entrata dal client. Puoi vedere il suo codice qui sotto:
funzione pubblica sendMessage (Request $ request) if (! Auth :: check ()) return new Response ('Forbidden', 403); $ data = $ request-> json () -> all (); $ data ['user'] = Auth :: user () -> nome; $ this-> pusher-> trigger ('anon-chat', 'send-message', $ data);
Voglio proteggere la nostra chat in modo che solo gli utenti autenticati possano accedervi, e puoi vedere nel codice sopra che controlla se l'utente è autenticato prima di attivare il invia messaggio
evento. Questo è un buon inizio, ma non è sufficiente per proteggere completamente la nostra chat perché chiunque abbia accesso alla nostra chiave di applicazione e alle informazioni del cluster può potenzialmente sottoscrivere e ascoltare i messaggi inviati attraverso i canali pubblici della nostra applicazione. Per proteggere completamente la nostra chat, abbiamo bisogno di utilizzare un canale privato per inviare i nostri messaggi e il primo passo è creare un canale privato.
Per creare un canale privato, attiviamo semplicemente un evento su un canale con a privato-
prefisso. Quindi possiamo cambiare la precedente chiamata a trigger ()
essere il seguente codice:
$ this-> pusher-> trigger ('private-chat', 'send-message', $ data);
Questo codice ora invierà i nostri messaggi attraverso il chat privata
canale, e dal punto di vista del server, questa è l'unica cosa di cui il server ha bisogno per inviare messaggi su un canale privato. I client, tuttavia, devono autenticarsi per iscriversi a un canale privato e lo fanno inviando richieste a un endpoint specializzato.
Quando una libreria client tenta di iscriversi a un canale privato, invia una richiesta POST a un endpoint di autorizzazione. Questo endpoint ha un singolo lavoro: determinare se l'utente è autenticato e rispondere con una risposta appropriata. Un nuovo metodo chiamato authorizeUser ()
gestirà questa richiesta e il suo codice è molto semplice.
public function authorizeUser (Request $ request) if (! Auth :: check ()) return new Response ('Forbidden', 403); echo $ this-> pusher-> socket_auth ($ request-> input ('channel_name'), $ request-> input ('socket_id'));
Controlla prima lo stato di autenticazione dell'utente e risponde con 403 Proibito se l'utente non ha effettuato l'accesso. Tuttavia, se il controllo dell'autorizzazione dell'utente passa, il authorizeUser ()
il metodo deve generare un valore speciale derivato da due valori dal corpo della richiesta.
L'output è generato dalla libreria Pusher socket_auth ()
metodo, come mostrato nel codice sopra. Se l'output risultante corrisponde al valore atteso dalla libreria client, il client viene autenticato e può iscriversi al canale privato.
Per fortuna, l'intero processo è automatizzato; dobbiamo solo configurare il client per inviare richieste di autorizzazione a questo endpoint.
Quando crei a Pusher
oggetto per la libreria client, è possibile configurare l'oggetto risultante per inviare richieste di autenticazione a un endpoint specifico. Basta aggiungere un authEndpoint
opzione e impostarlo sull'URL del proprio endpoint, come mostrato nel seguente codice.
let pusher = new Pusher ('427017da1bd2036904f3', authEndpoint: '/ channels / authorize', cluster: 'us2', crittografato: true, auth: headers: 'X-CSRF-Token': this.csrfToken ); lascia channel = pusher.subscribe ('private-chat');
Puoi anche impostare qualsiasi intestazione di autenticazione con auth
opzione. Questo codice imposta il X-CSRF-Token
intestazione per prevenire gli attacchi di contraffazione delle richieste cross-site.
Ora, quando il client tenta di iscriversi a un canale privato, si autenticherà utilizzando l'URL dell'endpoint fornito e consentirà o negherà l'accesso al canale in base alla risposta.
L'utilizzo di canali privati aumenta notevolmente la sicurezza della tua applicazione e la configurazione delle applicazioni per utilizzarle è un gioco da ragazzi. Con Canali di Pusher, è incredibilmente facile aggiungere comunicazioni sicure in tempo reale alle tue app e non richiede nemmeno molto codice!