Найти тему

Не стандартная авторизация в сокетах laravel

Так случилось, что недавно переносил старенькую браузерную игрушку, долбящую ajax запросами сервер, на laravel + socket.io, точнее laravel-echo-server, что примерно одно и то же.

Так вот, база юзеров там своя, пароли лежат в md5() с секретным ключем и проще было быстро написать свой middleware проверки авторизации чем переписать ларавельную систему аутентификации.

Проблема была вот в чем, надо подписать авторизованного юзера на приватный канал, например "game.private.100.5", где 100 - id игры, 5 - id юзера , откуда он получит приватные сообщения, но на том конце надо убедиться что подписан именно тот юзер, то есть авторизовать его.

Решение:

1) Добавляем в таблицу юзеров varchar поле (индекс) для хранения токена csrf и пишем его туда в момент логина

2) В метод boot() в AuthServiceProvider.php добавляем

3) В routes/channels.php

4) Клиент laravel-echo сам из коробки шлет заголовок x-csrf-token, поэтому тут ничего донастраивать не надо. Просто подписаться на канал .

Вроде все просто, но пришлось убить кучу времени чтобы к этому придти, может кому-то поможет...