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);
         }
     }
  1. Настройка конфигурации 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;
     }
  1. Обновите файл app/Providers/BroadcastServiceProvider.php:
  • Раскомментируйте следующую строку в методе boot():
     Broadcast::routes(['middleware' => ['web', 'auth']]);

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