Laravel Эхо + Laravel Аутентификация паспорта в частных каналах / каналах присутствия - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь подключиться к каналу присутствия присутствия , используя Laravel Эхо. Я также использую Laravel Паспорт. Я следовал многим учебникам, но я получаю 403 кода ошибки, 302 кода и так далее. Я размещаю свой сервер веб-сокетов локально, используя библиотеку laravel -websockets для обработки соединений. Vue - моя библиотека переднего плана.

Вот что я попробовал:

  • Отредактируйте BroadcastServiceProvider загрузочную функцию.

    public function boot() {
                Broadcast::routes(["prefix" => "api", "middleware" => "auth:api"]);
                require base_path('routes/channels.php');
            }
    
  • Добавьте маркер авторизации в заголовки Echo и добавьте свойство authEndpoint в bootstrap. js

    window.Echo = new Echo({
     broadcaster: 'pusher',
     authEndpoint: '/broadcasting/auth',
     key: process.env.MIX_PUSHER_APP_KEY,
     auth:{
         headers:{
             'Authorization': 'Bearer ' + auth_token,
         }
     },
     cluster: process.env.MIX_PUSHER_APP_CLUSTER,
     //encrypted: false
     wsHost: window.location.hostname,
     wsPort: 6001});
    
  • Попробуйте присоединиться к каналу с Vue.

    mounted(){
    Echo.join(`game.0`)
        .here((users) => {
            alert("In the channel!");
        })
        .joining((user) => {
            console.log("Someone entered");
        })
        .leaving((user) => {
            console.log(user.name);
        })
        .listen('GameEvent', (e) => {
            console.log("Hey")
        });}
    
  • маршрутов / каналов. php файл:

    Route::prefix('/user')->group(function(){
    Route::post('/login','api\v1\LoginController@Login');
    Route::middleware('auth:api')->get('/all','api\v1\user\UserController@index');});
    
  • Файл событий :

class GameEvent implements ShouldBroadcastNow
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $gameEvent;
    public $gameId;
    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct($gameEvent,$gameId)
    {
        //
        $this->gameEvent = $gameEvent;
        $this->gameId = $gameId;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        //return new PrivateChannel('channel-name');
        return new PresenceChannel('game.0');
    }

    public function broadcastWith(){
        return $this->gameEvent;
    }
}


На данный момент , если я пытаюсь подключиться к каналу, запрос broadcasting / auth получает код 302 (найдено). Я нашел ответ в другом посте, который утверждал, что решил эту проблему, добавив его в файл route / web. php.

Route::post('/broadcasting/auth', function(Request $request){
$pusher = new Pusher\Pusher(
    env('PUSHER_APP_KEY'),
    env('PUSHER_APP_SECRET'),
    env('PUSHER_APP_ID'),
    array(
        'cluster' => env('PUSHER_APP_CLUSTER'),
        'useTLS' => false,
        'host' => '127.0.0.1',
        'port' => 6001,
        'scheme' => 'http',
    )
);

ЭТО РАБОТАЛО , запрос широковещания / авторизация дает код 200, и я получаю это в ответ: {"auth":"ABCFEDG:0bfff7db6506158755b012a47873799849d4e6b331f68da4bedd1caea04ad657"}

но функции here, joining, leaving не запускаются.

Echo.join('game.0')
    .here((users) => {
        alert("In the channel!");
    })

Что мне сделать, чтобы заставить это работать?

Снимок экрана сетевого инспектора: enter image description here

...