Commencer avec Pusher Utiliser des canaux privés

Dans cette série, nous avons découvert Channels from Pusher, une plate-forme qui vous permet de donner à vos utilisateurs l'expérience transparente qu'ils recherchent en temps réel.. 

Les canaux privés fournissent à vos applications un support privé et sécurisé pour la publication de messages. La meilleure partie est la facilité avec laquelle il est possible d'implémenter et d'utiliser des canaux privés pour vos applications. Vous apprendrez à les utiliser dans ce post. 

 

Une meilleure application de chat

Dans la vidéo précédente, nous avons examiné une application de discussion très simple, sans utilisateur ni sécurité. c'était juste une discussion anonyme. Cela fonctionne, ne vous méprenez pas, mais nous pouvons faire mieux! Dans cette vidéo, nous allons donc examiner une version légèrement différente de cette application de discussion. Le front-end est à peu près le même, mais le back-end est une application Laravel.

Configuration du serveur

Même si l'application est alimentée par Laravel, les mêmes principes sont utilisés pour gérer nos messages. Au lieu d’un seul fichier, nous avons maintenant un CanauxContrôleur pour gérer nos trucs orientés sur les canaux, et il a un envoyer le message() méthode qui gère les demandes de discussion entrantes du client. Vous pouvez voir son code ci-dessous:

fonction publique sendMessage (Request $ request) if (! Auth :: check ()) return new Response ('Interdit', 403);  $ data = $ request-> json () -> all (); $ data ['user'] = Auth :: user () -> name; $ this-> pusher-> trigger ('anon-chat', 'send-message', $ data); 

Je souhaite protéger notre chat afin que seuls les utilisateurs authentifiés puissent y accéder. Vous pouvez voir dans le code ci-dessus qu'il vérifie si l'utilisateur est authentifié avant de déclencher la envoyer le message un événement. C'est un bon début, mais il ne suffit pas de protéger pleinement notre chat, car toute personne ayant accès à notre clé d'application et aux informations du cluster peut potentiellement s'abonner et écouter tous les messages envoyés via les canaux publics de notre application. Pour protéger complètement notre chat, nous devons utiliser un canal privé pour envoyer nos messages. La première étape consiste à créer un canal privé..

Pour créer un canal privé, il suffit de déclencher un événement sur un canal avec un privé- préfixe. Donc, nous pouvons changer l'appel précédent à déclencheur() être le code suivant:

$ this-> pusher-> trigger ('conversation privée', 'send-message', $ data);

Ce code va maintenant envoyer nos messages à travers le discussion privée canal, et du point de vue du serveur, c’est la seule chose dont le serveur a besoin pour envoyer des messages sur un canal privé. Cependant, les clients doivent s'authentifier pour s'abonner à un canal privé et le font en envoyant des demandes à un point de terminaison spécialisé..

Écriture du noeud final d'autorisation du client

Lorsqu'une bibliothèque cliente tente de s'abonner à un canal privé, elle envoie une demande POST à ​​un noeud final d'autorisation. Ce noeud final a un seul travail: déterminer si l'utilisateur est authentifié et répondre avec une réponse appropriée. Une nouvelle méthode appelée authorizeUser () va gérer cette demande, et son code est très simple.

fonction publique authorizeUser (Request $ request) if (! Auth :: check ()) retourne une nouvelle réponse ('Forbidden', 403);  echo $ this-> pousseur-> socket_auth ($ request-> input ('nom_canal'), $ request-> input ('socket_id')); 

Il vérifie d’abord le statut d’authentification de l’utilisateur, puis répond par 403 interdit si l’utilisateur n’est pas connecté. Cependant, si la vérification de l’authentification réussit, le authorizeUser () méthode doit générer une valeur spéciale dérivée de deux valeurs du corps de la requête. 

La sortie est générée par la bibliothèque Pusher. socket_auth () méthode, comme indiqué dans le code ci-dessus. Si la sortie obtenue correspond à la valeur attendue par la bibliothèque client, le client est authentifié et peut s'abonner au canal privé.. 

Heureusement, tout ce processus est automatisé. il suffit de configurer le client pour envoyer des demandes d'autorisation à ce noeud final.

Configurer le client

Lorsque vous créez un Poussoir Pour la bibliothèque cliente, vous pouvez configurer l’objet résultant pour envoyer des demandes d’authentification à un noeud final spécifique. Ajoutez simplement un authEndpoint option et définissez-la sur l'URL de votre point de terminaison, comme indiqué dans le code suivant..

let pusher = new Pusher ('427017da1bd2036904f3', authEndpoint: '/ channels / authorize', cluster: 'us2', chiffré: true, auth: en-têtes: 'X-CSRF-Token': this.csrfToken ) let channel = pusher.subscribe ('chat privé');

Vous pouvez également définir n’importe quel en-tête d’authentification avec auth option. Ce code définit le X-CSRF-Token en-tête pour empêcher les attaques de falsification de requêtes entre sites.

Désormais, lorsque le client tente de s'abonner à un canal privé, il s'authentifie à l'aide de l'URL de noeud final fournie et autorise ou refuse l'accès au canal en fonction de la réponse..

Conclusion

L'utilisation de canaux privés augmente considérablement la sécurité de votre application et la configuration de vos applications pour les utiliser est un jeu d'enfant. Avec Channels from Pusher, il est incroyablement facile d’ajouter une communication sécurisée en temps réel à vos applications, et cela ne nécessite même pas beaucoup de code.!