Începeți cu Push Utilizarea canalelor private

În această serie, am învățat despre Channels from Pusher, o platformă care vă permite să oferiți utilizatorilor experiența fără probleme în timp real. 

Canalele private oferă aplicațiilor dvs. un mediu securizat și privat pentru publicarea mesajelor. Cea mai bună parte este cât de ușor este implementarea și utilizarea canalelor private pentru aplicațiile dvs. Veți învăța cum să le utilizați în acest post. 

 

O aplicație de chat mai bună

În videoclipul anterior, am analizat o aplicație de chat foarte simplă, care nu avea utilizatori și nici o securitate; a fost doar chat anonim. Funcționează, nu mă înțelege greșit, dar putem face mai bine! Deci, în acest videoclip, vom examina o versiune ușor diferită a acelei aplicații de chat. Front-end-ul este în mare parte același, dar back-end-ul este o aplicație Laravel.

Configurarea serverului

Chiar dacă aplicația este alimentată de Laravel, aceleași principii sunt folosite pentru a gestiona mesajele noastre. În loc de un singur fișier, avem acum o ChannelsController să se ocupe de lucrurile orientate spre canale și are o funcție Trimite mesaj() care gestionează cererile de chat de la client. Puteți vedea codul de mai jos:

funcția publică sendMessage (Solicitare cerere $) if (! Auth :: check ()) returnează răspuns nou ("Interzis", 403);  $ data = $ request-> json () -> toate (); $ data ['user'] = Auth :: user () -> nume; $ this-> pushher-> trigger ('anon-chat', 'send-message', $ date); 

Vreau să protejez chat-ul nostru, astfel încât numai utilizatorii autentificați să îl poată accesa și puteți vedea în codul de mai sus că verifică dacă utilizatorul este autentificat înainte să declanșeze Trimite mesaj eveniment. Acesta este un început bun, dar nu este suficient să protejăm pe deplin chatul nostru pentru că oricine are acces la cheia noastră de aplicație și la informații despre cluster se poate abona și ascultă pentru orice mesaje trimise prin canalele publice ale aplicației noastre. Pentru a ne proteja complet chat-ul, trebuie să folosim un canal privat pentru a trimite mesajele noastre, iar primul pas este crearea unui canal privat.

Pentru a crea un canal privat, pur și simplu declanșăm un eveniment pe un canal cu un privat- prefix. Deci, putem schimba apelul anterior la declanșare () pentru a fi următorul cod:

$ this-> pushher-> trigger ("private-chat", "send-message", $ date);

Acest cod va trimite acum mesajele noastre prin privat-chat- canal și din perspectiva serverului, acesta este singurul lucru necesar serverului pentru a trimite mesaje pe un canal privat. Cu toate acestea, clienții trebuie să se autentifice pentru a se abona la un canal privat, iar acest lucru se face prin trimiterea de cereri către un obiectiv final.

Scrierea punctului final al autorizației clientului

Atunci când o bibliotecă client încearcă să se aboneze la un canal privat, emite o solicitare POST către un punct final de autorizare. Acest punct final are o singură lucrare: pentru a determina dacă utilizatorul este autentificat și răspunde cu un răspuns adecvat. O nouă metodă numită authorizeUser () va gestiona această solicitare, iar codul său este foarte simplu.

funcția publică authorizeUser (Solicitare $ request) if (! Auth :: check ()) returnează răspunsul nou ("Interzis", 403);  echo $ this-> pusher-> socket_auth ($ request-> input ('channel_name'), $ request-> input ('socket_id')); 

Mai întâi verifică starea de autentificare a utilizatorului și răspunde cu 403 Interzis dacă utilizatorul nu este conectat. Dar dacă verificarea de autentificare a utilizatorului trece, authorizeUser () metoda trebuie să genereze o valoare specială care derivă din două valori din corpul solicitării. 

Ieșirea este generată de biblioteca Pusher socket_auth () , așa cum se arată în codul de mai sus. Dacă rezultatul rezultat corespunde valorii așteptate de biblioteca client, atunci clientul este autentificat și se poate abona la canalul privat. 

Din fericire, întregul proces este automatizat; trebuie doar să configuram clientul să trimită cereri de autorizare acestui punct final.

Configurarea clientului

Când creați o Pusher obiect pentru biblioteca client, puteți configura obiectul rezultat pentru a trimite cereri de autentificare la un anumit parametru final. Pur și simplu adăugați un authEndpoint și setați-o la adresa URL a punctului final, după cum se arată în codul următor.

lăsați pusher = Pusher nou ('427017da1bd2036904f3', authEndpoint: '/ channels / authorize', cluster: 'us2', criptat: true, auth: headers: 'XCSRF-Token': this.csrfToken ); lasa channel = pusher.subscribe ('private-chat');

De asemenea, puteți seta anteturile de autentificare cu AUTH opțiune. Acest cod stabilește X-CSRF-Jeton antet pentru a împiedica atacurile de tip "forgery request".

Acum, când clientul încearcă să se aboneze la un canal privat, acesta se va autentifica utilizând adresa URL a punctului final furnizat și va permite sau va refuza accesul la canal pe baza răspunsului.

Concluzie

Utilizarea canalelor private crește în mod semnificativ securitatea aplicației dvs. și configurarea aplicațiilor pentru a le utiliza este o briză. Cu canalele de la Pusher, este incredibil de ușor să adăugați o comunicație sigură în timp real în aplicațiile dvs. și nici nu necesită mult cod!

Cod