I denne serien har vi lært om kanaler fra Pusher, en plattform som lar deg gi brukerne den sømløse sanntidsopplevelsen de vil ha.
Private kanaler gir dine applikasjoner et sikkert, privat medium for publisering av meldinger. Den beste delen er hvor enkelt det er å implementere og bruke private kanaler for appene dine. Du lærer hvordan du bruker dem i dette innlegget.
I den forrige videoen så vi på et veldig enkelt chatprogram som ikke hadde noen brukere og ingen sikkerhet; det var bare anonym chat. Det fungerer, gjør meg ikke galt, men vi kan gjøre det bedre! Så i denne videoen ser vi på en litt annen versjon av det aktuelle chatprogrammet. Fronten er stort sett den samme, men bakenden er en Laravel-applikasjon.
Selv om appen er drevet av Laravel, brukes de samme prinsippene til å håndtere våre meldinger. I stedet for en enkelt fil har vi nå en ChannelsController
å håndtere våre kanaler-orienterte ting, og den har a sende melding()
metode som håndterer innkommende chatforespørsler fra klienten. Du kan se koden nedenfor:
offentlig funksjon sendMessage (Forespørsel $ forespørsel) if (! Auth :: check ()) returner nytt svar ('Forbidden', 403); $ data = $ request-> json () -> all (); $ data ['user'] = Auth :: bruker () -> navn; $ this-> pusher-> trigger ('anon-chat', 'send-message', $ data);
Jeg vil beskytte vår chat slik at bare autentiserte brukere kan få tilgang til det, og du kan se i koden ovenfor at den sjekker om brukeren er autentisert før den utløser sende melding
begivenhet. Det er en god start, men det er ikke nok til å beskytte vår chat fullt ut, fordi alle som har tilgang til programnøkkelen og klyngedata, kan potensielt abonnere på og lytte etter meldinger sendt over programmets offentlige kanaler. For å beskytte vår chat helt, må vi bruke en privat kanal for å sende våre meldinger, og det første trinnet er å opprette en privat kanal.
For å opprette en privat kanal utløser vi bare en hendelse på en kanal med en privat-
prefiks. Så vi kan endre forrige samtale til avtrekker()
å være følgende kode:
$ this-> pusher-> trigger ('private chat', 'send-message', $ data);
Denne koden vil nå sende våre meldinger via privat chat
kanal, og fra serverens perspektiv, det er det eneste serveren trenger for å kunne sende meldinger over en privat kanal. Klienter må imidlertid autentiseres for å kunne abonnere på en privat kanal, og de gjør det ved å sende forespørsler til et spesialisert endepunkt.
Når et klientbibliotek forsøker å abonnere på en privat kanal, utsteder den en POST-forespørsel til et autorisasjonsendepunkt. Dette endepunktet har en enkelt jobb: å avgjøre om brukeren er godkjent og svare med en passende respons. En ny metode kalt authorizeUser ()
vil takle denne forespørselen, og koden er veldig enkel.
offentlig funksjon authorizeUser (Request $ request) if (! Auth :: check ()) returner nytt svar ('Forbidden', 403); echo $ this-> pusher-> socket_auth ($ request-> input ('channel_name'), $ request-> input ('socket_id'));
Den kontrollerer først brukerens autentiseringsstatus, og den reagerer med 403 Forbidden hvis brukeren ikke er logget inn. Men hvis brukerens auth-kontroll passerer, authorizeUser ()
Metoden må utdatere en spesiell verdi som er avledet fra to verdier fra forespørselen.
Utgangen genereres av Pusher-bibliotekets socket_auth ()
metode, som vist i koden ovenfor. Hvis den resulterende produksjonen samsvarer med verdien som forventes av klientbiblioteket, er klienten autentisert og kan abonnere på den private kanalen.
Heldigvis er hele denne prosessen automatisert; Vi må bare konfigurere klienten for å sende autorisasjonsforespørsler til dette sluttpunktet.
Når du lager en Pusher
objekt for klient biblioteket, kan du konfigurere det resulterende objektet til å sende godkjenningsforespørsler til et bestemt sluttpunkt. Bare legg til en authEndpoint
alternativet og sett det til nettadressen til sluttpunktet ditt, som vist i følgende kode.
la pusher = ny Pusher ('427017da1bd2036904f3', authEndpoint: '/ channels / authorize', klynge: 'us2', kryptert: true, auth: overskrifter: 'X-CSRF-Token': this.csrfToken ); la kanal = pusher.subscribe ('private chat');
Du kan også angi noen autentiseringsoverskrifter med auth
alternativ. Denne koden angir X-CSRF-Token
header for å forhindre overføringsanmodninger på stedet.
Nå, når klienten forsøker å abonnere på en privat kanal, vil den autentisere ved hjelp av den angitte sluttpunktsadressen og tillate eller nekte tilgang til kanalen basert på svaret.
Bruke private kanaler øker sikkerheten til søknaden din dramatisk, og konfigurering av programmene dine for å bruke dem er en bris. Med kanaler fra Pusher er det utrolig enkelt å legge til sann sanntidskommunikasjon i appene dine, og det krever ikke engang mye kode!