Laravel echo socket.io клиент, как реализуется авторизация?

В Laravel существует несколько способов реализации авторизации для клиента Socket.io с использованием библиотеки Laravel Echo. Вот один из них:

1. Настройка маршрутов и контроллера:
- Создайте маршруты в файле routes/web.php, которые будут отвечать на запросы авторизации. Например, /broadcasting/auth:

     Route::post('/broadcasting/auth', '[email protected]')->name('broadcasting.auth');

- Создайте контроллер AppHttpControllersBroadcastingController с методом authenticate:

     <?php
     
     namespace AppHttpControllers;
     
     use IlluminateHttpRequest;
     use IlluminateSupportFacadesAuth;
     
     class BroadcastingController extends Controller
     {
         public function authenticate(Request $request)
         {
             $user = Auth::user();
             
             if ($user) {
                 $user->tokens()->update(['last_used_at' => now()]);
                 return ['user' => $user];
             }
             
             abort(401);
         }
     }

2. Настройка конфигурации Laravel Echo:
- Установите библиотеку Socket.io клиента через NPM:

     npm install --save socket.io-client

- В файле resources/js/bootstrap.js добавьте следующий код после строки import Echo from 'laravel-echo';:

     import { token } from './helpers/auth'; // Импортируйте функцию token для получения авторизационного токена
     import io from 'socket.io-client';
     
     window.io = io;
     
     window.Echo = new Echo({
         broadcaster: 'socket.io',
         host: window.location.hostname + ':6001',
         auth: {
             headers: {
                 Authorization: 'Bearer ' + token() // Передайте авторизационный токен
             }
         }
     });

- Создайте файл resources/js/helpers/auth.js и добавьте в него следующий код, который будет возвращать авторизационный токен:

     export function token() {
         return document.head.querySelector('meta[name="csrf-token"]').content;
     }

3. Обновите файл app/Providers/BroadcastServiceProvider.php:
- Раскомментируйте следующую строку в методе boot():

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

После выполнения всех шагов, Laravel будет генерировать авторизационные токены для каждого пользователя, используя функционал аутентификации Laravel. Когда пользователь подключается к серверу Socket.io, Echo будет автоматически передавать авторизационный токен в заголовке запроса к маршруту /broadcasting/auth. Контроллер BroadcastingController будет выполнять авторизацию пользователя с помощью метода Auth::user() и, если пользователь успешно аутентифицирован, вернет информацию о пользователе.