Проблема с трансляцией / авторизацией Laravel Echo + VueJS

Я использую Laravel Echo и pusher в качестве своего сервера. Он уже работает на публичных каналах.

Вот фотография моего прослушивателя эха laravel, ссылка на изображение

Теперь моя проблема в том, что когда я использую PrivateChannel, и когда я слушаю в частном канале, выскакивает эта ошибка:

POST http://localhost:3000/broadcasting/auth 500 (внутренняя ошибка сервера)

Внутри ошибки на вкладке консоли / сети написано, что Маршрут [логин] не определен.

Вот изображение внутри консоли / сети https://i.stack.imgur.com/fnAGp.png

Что я сделал:

-Рекомментированный класс App \ Providers \ BroadcastServiceProvider :: в config / app.php

-Добавлен Broadcast :: routes (['middleware' => ['auth: api']]); в BroadcastServiceProvider.php

-Используется Echo.private ('channel-name') вместо Echo.channel ('channel-name') для прослушивания частных каналов

-Добавлен authEndpoint: 'http://localhost:3000/broadcasting/auth' в bootstrap.js ( Вот где мои варианты Echo)

-Добавлен канал (вероятно, частный канал) в моем channels.php (вот фото )

-Добавлен метатег токена csrf в мой основной клинок

На сервере pusher он получает событие, когда оно запускается, вот изображение успешно запущенного события .

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


person Jonas Estillore    schedule 11.11.2019    source источник
comment
Не могли бы вы показать свой файл routes / channels.php, а также добавили ли вы поле метатега CSRF Token на свою базовую страницу макета?   -  person Md. Miraj Khan    schedule 11.11.2019
comment
@ Md.MirajKhan, пожалуйста, проверьте фото в посте   -  person Jonas Estillore    schedule 11.11.2019
comment
Вы вошли в систему, используя API Auth?   -  person Md. Miraj Khan    schedule 11.11.2019
comment
@ Md.MirajKhan Я использую Laravel Passport для проверки подлинности API, который использует промежуточное ПО auth api   -  person Jonas Estillore    schedule 11.11.2019
comment
поэтому вам нужно передать свой api_toke с помощью маршрута толкателя.   -  person Md. Miraj Khan    schedule 11.11.2019
comment
@ Md.MirajKhan, куда и что именно вы указываете   -  person Jonas Estillore    schedule 11.11.2019


Ответы (1)


Вы должны передать заголовок auth с запросом pusher, как показано ниже.

window.Echo = new Echo({
    broadcaster: 'pusher',
    key: 'APP_KEY',
    authEndpoint: '/broadcasting/auth'
    auth: {
        headers: {
            'Authorization': 'Bearer your_api_Toke',
            'X-CSRF-Token': "CSRF_TOKEN"
         }
      }
    });

Больше подробностей:

https://github.com/laravel/echo/issues/26
Laravel Echo не использует заголовки аутентификации

person Md. Miraj Khan    schedule 11.11.2019
comment
Чтобы добавить к ответу, если вы используете Laravel API на бэкэнде с Vue на переднем конце, вы, вероятно, вообще не захотите использовать CSRF_TOKEN. Поэтому удалите это из заголовка на передней панели, а на laravel перейдите в app / Http / Middleware / VerifyCsrfToken.php и добавьте «broadcasting / auth» в $ except []. Также можно сделать это для тестирования, пока все остальное не заработает. - person fred; 11.07.2020