In deze serie hebben we geleerd over kanalen van Pusher, een platform waarmee u uw gebruikers de naadloze realtime ervaring kunt bieden die ze willen.
Privékanalen bieden uw toepassingen een beveiligd privé-medium voor het publiceren van berichten. Het beste deel is hoe gemakkelijk het is om privékanalen voor uw apps te implementeren en te gebruiken. Je leert hoe je ze kunt gebruiken in dit bericht.
In de vorige video keken we naar een heel eenvoudige chattoepassing zonder gebruikers en zonder beveiliging; het was gewoon anoniem chatten. Het werkt, begrijp me niet verkeerd, maar we kunnen het beter doen! In deze video kijken we dus naar een iets andere versie van die chattoepassing. De voorkant is grotendeels hetzelfde, maar de back-end is een Laravel-toepassing.
Hoewel de app wordt aangedreven door Laravel, worden dezelfde principes gebruikt om onze berichten te verwerken. In plaats van een enkel bestand hebben we nu een ChannelsController
om onze kanaalgeoriënteerde dingen aan te pakken, en het heeft een bericht versturen()
methode die inkomende chat-aanvragen van de client verwerkt. Je kunt de code hieronder zien:
public function sendMessage (Request $ request) if (! Auth :: check ()) return new Response ('Forbidden', 403); $ data = $ request-> json () -> all (); $ data ['user'] = Auth :: user () -> naam; $ this-> pusher-> trigger ('anon-chat', 'send-bericht', $ data);
Ik wil onze chat beschermen zodat alleen geverifieerde gebruikers er toegang tot hebben, en u kunt in de bovenstaande code zien dat wordt gecontroleerd of de gebruiker is geverifieerd voordat de chat wordt geactiveerd bericht versturen
evenement. Dat is een goed begin, maar het is niet voldoende om onze chat volledig te beschermen, want iedereen die toegang heeft tot onze applicatiesleutel en clusterinformatie kan zich abonneren op en luisteren naar berichten die via de openbare kanalen van onze applicatie worden verzonden. Om onze chat volledig te beschermen, moeten we een privékanaal gebruiken om onze berichten te verzenden, en de eerste stap is om een privékanaal te maken.
Om een privékanaal te maken, activeren we eenvoudigweg een evenement op een kanaal met een privaat-
voorvoegsel. Dus we kunnen de vorige oproep wijzigen naar op gang brengen()
om de volgende code te zijn:
$ this-> pusher-> trigger ('private-chat', 'send-bericht', $ data);
Deze code verzendt nu onze berichten via de prive chat
kanaal en vanuit het perspectief van de server, dat is het enige dat de server nodig heeft om berichten over een privékanaal te verzenden. Cliënten moeten echter worden geverifieerd om zich te abonneren op een privékanaal, en dit doen ze door verzoeken naar een gespecialiseerd eindpunt te verzenden.
Wanneer een clientbibliotheek probeert zich te abonneren op een privékanaal, wordt een POST-aanvraag verzonden naar een autorisatie-eindpunt. Dit eindpunt heeft één taak: bepalen of de gebruiker is geverifieerd en reageren met een passend antwoord. Een nieuwe methode genaamd authorizeUser ()
zal dit verzoek behandelen, en de code is heel eenvoudig.
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'));
Het controleert eerst de authenticatiestatus van de gebruiker en het antwoordt met 403 Verboden als de gebruiker niet is ingelogd. Maar als de authenticatiecontrole van de gebruiker slaagt, authorizeUser ()
methode moet een speciale waarde uitvoeren die is afgeleid van twee waarden uit de hoofdtekst van het verzoek.
De uitvoer wordt gegenereerd door de Pusher-bibliotheek socket_auth ()
methode, zoals weergegeven in de bovenstaande code. Als de resulterende uitvoer overeenkomt met de waarde die wordt verwacht door de clientbibliotheek, wordt de client geverifieerd en kan deze zich abonneren op het privékanaal.
Gelukkig is dit hele proces geautomatiseerd; we hoeven alleen de client te configureren om autorisatieverzoeken naar dit eindpunt te verzenden.
Wanneer u een maakt Pusher
object voor de clientbibliotheek, kunt u het resulterende object configureren om verificatieaanvragen naar een specifiek eindpunt te verzenden. Voeg gewoon een toe authEndpoint
optie en stel deze in op de URL van uw eindpunt, zoals weergegeven in de volgende code.
let pusher = new Pusher ('427017da1bd2036904f3', authEndpoint: '/ channels / authorize', cluster: 'us2', versleuteld: true, auth: headers: 'X-CSRF-Token': this.csrfToken ); laat kanaal = pusher.subscribe ('private-chat');
U kunt ook elke authenticatiekop instellen met de auth
keuze. Deze code stelt de X-CSRF-Token
header om cross-site request forgery attacks te voorkomen.
Wanneer de client zich nu probeert te abonneren op een privékanaal, wordt deze geverifieerd met de opgegeven eindpunt-URL en wordt toegang tot het kanaal toegestaan of geweigerd op basis van het antwoord.
Het gebruik van privékanalen verhoogt de beveiliging van uw toepassing aanzienlijk en het configureren van uw toepassingen om ze te gebruiken, is een fluitje van een cent. Met Channels from Pusher is het ongelooflijk eenvoudig om veilige real-time communicatie toe te voegen aan je apps, en het vereist zelfs niet veel code!