Я не могу заставить работать echo и pusher при использовании частных каналов, два дня гуглил и нашел нада.
Кажется, что происходит какая-то проблема с аутентификацией (я использую Laravel basic Auth), потому что я могу подписаться на общедоступные каналы
маршруты / каналы.php
Broadcast::channel('private-ci-received-{userId}', function ($user, $userId) {
return (int) $user->id === (int) $userId;
});
Broadcast::channel('private-ci-received-{toUserId}', function ($currentUser, $toUserId) {
return true;
});
bootstrap.js
import Echo from 'laravel-echo'
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY,
cluster: process.env.MIX_PUSHER_APP_CLUSTER,
logToConsole: true,
encrypted: true,
});
default.blade.php (основной макет)
Pusher.logToConsole = true;
Echo.logToConsole = true;
Echo.private('ci-received-{{ Auth::user()->id}}')
.listen('.CIReceived', (e) => {
console.info(e);
});
На консоли печатается следующее:
Pusher : No callbacks on private-ci-received-1 for pusher:subscription_error
Это довольно общая ошибка, тогда для целей отладки я попытался привязать ошибку с помощью Pusher (не laravel echo)
var pusher = new Pusher('MYSECRETAPPKEYHERE', {
cluster: 'us2',
forceTLS: true
});
var channel = pusher.subscribe('private-ci-received-1');
channel.bind('pusher:subscription_error', function(data) {
console.info(data);
});
console.info (данные) вывод
JSON returned from webapp was invalid, yet status code was 200
По умолчанию authEndPoint - это / broadcasting / auth IIRC. Я думаю, он ожидает возврата JSON, но вместо этого возвращает HTML-КОД с моей страницы.
Эти маршруты создаются самим фреймворком, и из того, что я читал, Laravel echo и Laravel Auth должны отлично работать вместе без особых усилий.
Мой файл .env верен, я использую pusher в качестве драйвера вещания, а BroadcastServiceProvider правильно раскомментирован.
Может ли кто-нибудь пролить свет на этот вопрос? Спасибо






Установите APP_DEBUG=true в свой файл .env и проверьте HTTP-ответ вашего маршрута аутентификации в разделе сети инструментов разработчика вашего браузера. Если аутентификация прошла успешно, ваше приложение laravel должно ответить JSON следующим образом:
{"auth": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
Если есть ошибка, она будет отображаться в ответе, так как вы установили режим отладки на true.
Вам не нужно добавлять приватный канал на свой канал в broadcasting.php, это делается автоматически.
Попробуй это
Broadcast::channel('ci-received-{userId}', function ($user, $userId) {
return (int) $user->id === (int) $userId;
});
Это сработало для меня
Значение по умолчанию .env -
.
BROADCAST_DRIVER = журнал
Пожалуйста, измените его на
BROADCAST_DRIVER=pusher
Я также получал ["Нет обратных вызовов на private-user.1 для pusher: subscription_error"]
После внесения вышеуказанных изменений у меня все работает нормально