Аутентификация сокета Laravel Ratchet

Я начинаю изучать Ratchet (reactPHP). Я использую laravel. Но я пришел к строке о безопасности. Как я могу запретить подключение к веб-сокету на основе входа пользователя в систему или нет

public function onOpen(ConnectionInterface $conn)
    {
        $this->clients->attach($conn);
        $this->users[$conn->resourceId] = $conn;
        if(Auth::check()){
            echo 'user logged in';
        }else{
            echo "New connection! ({$conn->resourceId})\n";
        }

    }

Я использовал что-то вроде этого, но он проходит Auth::check, и консоль всегда показывает New Connection.


person Froxz    schedule 13.01.2016    source источник


Ответы (3)


Хорошо. Поиграл с найденным решением, и вроде все в порядке: я использую Sentinel.

$session = (new SessionManager(App::getInstance()))->driver();
$cookies = $conn->WebSocket->request->getCookies();
$laravelCookie = urldecode($cookies['timeline_auth']);
$idSession = Crypt::decrypt($laravelCookie);
$user = Sentinel::findByPersistenceCode($idSession);

Если есть лучшее решение, пожалуйста, оставьте комментарий

person Froxz    schedule 13.01.2016

Вы больше не можете использовать Auth::user() с WebSocket. Сервер WebSocket обрабатывает несколько соединений (поэтому Auth::user() не имеет смысла). НО вы можете получить доступ к сеансу пользователя.

подробнее здесь

https://laravel.io/forum/01-16-2015-loading-laravels-session-using-ratchet

person demon36    schedule 02.04.2017

Используйте пакет laravel-ratchet.

Он будет обрабатывать подключение к преобразованию аутентификации и сеансу laravel для вас.

person shamaseen    schedule 04.04.2019