Прежде всего я хотел бы сказать, что я знаю, что на эту тему действительно много тем. Я читаю их почти все, но безуспешно.
Я использую 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. Может кто-нибудь, пожалуйста, помогите, потому что я потерян.
Сам разобрался. Некоторое время назад я обновил свой проект с Laravel 5.3 до 5.4. Я ожидал, что channel.php, который я создал вручную, был импортирован автоматически. Оказалось, что я должен был импортировать это в моем broadcastServiceProvider
, Теперь все отлично работает 🙂
Ваш шаблон приложения должен иметь <meta name="csrf-token" content="{{ csrf_token() }}">
в head
элемент или вы можете установить window.Laravel.csrfToken
перед выполнением соединения через сокет Echo
,
Убедиться, что Echo
делает запрос аутентификации, который содержит CSRF-Token
в шапке.
Вы можете проверить это на вкладке «Сеть» инструментов разработчика вашего браузера.