2017-02-24 1 views
2

J'ai un canal privé. Et je peux l'utiliser seulement si je suis authentifié sur le site. Mais dans le cas d'un passeport laravel, je n'ai aucune idée de comment cela devrait fonctionner. Par défaut, tout ce dont j'ai besoin se trouve dans les cookies. Ce que je:Autorisation de passeport laravel via websocket

Broadcast::routes(); 
Broadcast::channel('App.User.{id}', function ($user, $id) { 
    return (int) $user->id === (int) $id; 
}); 

Broadcast::routes(['middleware' => ['api']]); n'a aucun effet.

Comment puis-je authentifier les utilisateurs via le passeport laravel, car celui-ci serait connecté à une socket Web de canal privé?

Répondre

1

Malheureusement pour le moment l'écho ne supporte pas l'autorisation avec l'aide du passeport laravel, il est nécessaire d'écrire votre propre serveur sokket.io.

2

J'ai été à travers cela, et ma solution utilisait Laravel Echo & Laravel Echo Server pour SocketIo.

Récupérer le jeton d'accès utilisateur, puis le stocker dans le stockage cookies ou de l'application, et l'injectent pendant que vous instancier ou re-instanciation Laravel Echo, comme les suivants:

let Echo = require('laravel-echo') 

window.Echo = new Echo({ 
     broadcaster: 'socket.io', 
     host: window.location.hostname + ':6001' 
     auth: { 
      headers: { 
       Authorization: 'Bearer ' + AUTH_API_TOKEN, 
      }, 
     }, 
    }); 

Références:

  1. https://laravel.com/docs/5.3/broadcasting#driver-prerequisites
  2. https://github.com/tlaverdure/laravel-echo-server