Laravel Echo + Pusher subscription_error на частном канале

Я не могу заставить работать 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 правильно раскомментирован.

Может ли кто-нибудь пролить свет на этот вопрос? Спасибо

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
2 251
3

Ответы 3

Установите 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"]

После внесения вышеуказанных изменений у меня все работает нормально

Другие вопросы по теме