Laravel / широковещательный / auth всегда терпит неудачу с ошибкой 403

Недавно я изучил комбинацию Laravel-Echo и Pusher в Laravel 5.3. Я успешно настроил публичные каналы и перешел на частные. У меня проблемы с тем, что Laravel возвращает 403 с маршрута / broadcasting / auth, независимо от того, что я делаю, чтобы попытаться авторизовать действие (вплоть до использования простого оператора true). Может кто-нибудь сказать мне, что я делаю не так?

App / Провайдеры / BroadcastServiceProvider.php:

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Broadcast;

class BroadcastServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Broadcast::routes();

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

resources/assets/js/booststrap.js:
import Echo from "laravel-echo"
window.Echo = new Echo({
broadcaster: 'pusher',
key: 'My-Key-Here'
});

window.Echo.private('App.User.1')
.notification((notification) => {
console.log(notification.type);
});

Я вижу событие и его полезную нагрузку в моей консоли отладки Pusher, оно просто завершается ошибкой, когда попадает на маршрут аутентификации.

6

Решение

Ошибка 403 / широковещательная / аутентификация с версией Laravel> 5.3 & Pusher, вам нужно изменить свой код в resources / assets / js / bootstrap.js с помощью

window.Echo = new Echo({
broadcaster: 'pusher',
key: 'your key',
cluster: 'your cluster',
encrypted: true,
auth: {
headers: {
Authorization: 'Bearer ' + YourTokenLogin
},
},
});

И в app / Providers / BroadcastServiceProvider.php изменить на

Broadcast::routes()

с

Broadcast::routes(['middleware' => ['auth:api']]);

или же

Broadcast::routes(['middleware' => ['jwt.auth']]); //if you use JWT

это сработало для меня, и надеюсь, что это поможет вам.

4

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

Я решаю это путем создания канала.

Создайте свои Авторизирующиеся Каналы в маршрутах-> channel.php

Broadcast::channel('chatroom', function ($user) {
return $user;
});

Смотрите документацию: https://laravel.com/docs/5.4/broadcasting#authorizing-channels

Спасибо

1

То, что работало для меня, было использовать метод частный пакета Laravel Echo:
https://laravel.com/docs/5.3/notifications#listening-for-notifications

Echo.private('App.User.1')
.notification((notification) => {
console.log(notification.type);
});
0

В моем случае проблема была в неправильном идентификаторе пользователя:

Echo.private('user.'+CURRENT_USER_ID_HERE)
0

Это может произойти, если вы больше не вошли в систему. Убедитесь, что вы действительно вошли в приложение Laravel и что текущий сеанс еще не истек.

Я снова вошел в систему, и это сработало для меня.

0

В случае, если кто-то входит в последнюю версию Laravel 5.7 с такими же проблемами, для меня хорошим решением было проверить аутентификацию на каждом канале перед возвратом или после возврата, как показано ниже.

Broadcast::channel('user.*', function ($user) {
return Auth::check();

});

Broadcast::channel('conversation.{id}', function ($user, $conversationId) {
Auth::check();
return $user->isInConversation(Conversation::find($conversationId));
});

Таким образом, он работает с любым каналом, транслирующим любое событие, включая пользователей.

Я надеюсь, что это может помочь кому-то еще.

0

Проверьте, как вы авторизуете свой канал. В зависимости от вашей настройки это может помочь. Обновите ваш BroadcastServiceProvider следующим:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Broadcast;

class BroadcastServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Broadcast::routes(['middleware' => ['auth:api']]);

require base_path('routes/channels.php');
}
}

Добавляет промежуточное программное обеспечение Auth API для использования с Laravel Passport.

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