Javascript — Laravel вещание: частные каналы не работают из-за ошибки аутентификации

Прежде всего я хотел бы сказать, что я знаю, что на эту тему действительно много тем. Я читаю их почти все, но безуспешно.

Я использую Laravel Echo и Pusher для работы веб-сокетов. Это на самом деле работает для обычных (читай: не частных) каналов. Я получаю объект Javascript в хорошем состоянии.

Где начинается проблема, когда я пытаюсь отправить что-то на частном канале. Я получаю в своей консоли следующее предупреждение:
Pusher : Couldn't get auth info from your webapp : 500

Я полагаю, это связано с проблемой аутентификации частного канала. Я пытался аутентифицировать их в следующих местах:

BroadcastServiceProvider:

class BroadcastServiceProvider extends ServiceProvider
{

public function boot()
{
Broadcast::routes();

/*
* Authenticate the user's personal channel...
*/
Broadcast::channel('notification.{userid}', function ($user, $userid) {
return true;
});
}
}

или маршруты / channel.php:

<?php

use Illuminate\Support\Facades\Broadcast;

Broadcast::channel('notification.{userid}', function ($user, $userid) {
return (int) $user->id === (int) $userId;
});

но ничего из этого не работает Я также попытался изменить подстановочный знак на *вместо {userid} но это не сработает.

Пушер, однако, показывает событие в нормальной форме. Таким образом, они отправляются, только получение от Echo создает проблемы. Моя конфигурация Echo выглядит следующим образом:

this.websocket = new Echo({
broadcaster: 'pusher',
key: 'KEY',
cluster: 'eu',
encrypted: false,
authEndpoint: 'http://127.0.0.1:8000/broadcasting/auth'
});

this.id = 1;

this.websocket.private('notification.' + this.id).listen('CreditsSent', e => {
console.log(e);
});

Я использую Laravel 5.4 и PHP 7.x. Может кто-нибудь, пожалуйста, помогите, потому что я потерян.

0

Решение

Сам разобрался. Некоторое время назад я обновил свой проект с Laravel 5.3 до 5.4. Я ожидал, что channel.php, который я создал вручную, был импортирован автоматически. Оказалось, что я должен был импортировать это в моем broadcastServiceProvider, Теперь все отлично работает 🙂

1

Другие решения

Ваш шаблон приложения должен иметь <meta name="csrf-token" content="{{ csrf_token() }}"> в head элемент или вы можете установить window.Laravel.csrfToken перед выполнением соединения через сокет Echo,

Убедиться, что Echo делает запрос аутентификации, который содержит CSRF-Token в шапке.

Вы можете проверить это на вкладке «Сеть» инструментов разработчика вашего браузера.

0

По вопросам рекламы [email protected]