Задать вопрос

Каким образом авторизировать пользователя при использовании веб-сокетов?

Какой лучший способ, по вашему мнению, для проверки прав пользователя пользователя на определенные действия при использовании веб-сокетов?
Я нашел для себя такой способ, но как по-мне, он ужасен (в конкретном примере используется yii2 и Ratchet в качестве веб-сокет сервера.):
/**
     * Open session and db connections. Returns connected user.
     *
     * @throws \Exception
     * @param ConnectionInterface $conn
     * @return UserAccounts
     */
    private function onUser($conn)
    {
        Yii::$app->session->close();
        session_id($conn->WebSocket->request->getCookie(ini_get('session.name')));
        Yii::$app->session->open();
        Yii::$app->db->open();
        if (!($user = UserAccounts::findOne(Yii::$app->session['__id']))) {
            throw new Exception('Пользователь не существует.');
        }
        Yii::$app->set('request', new Request());
        if  (!Yii::$app->user->login($user)) {
            throw new Exception('Пользователь не существует.');
        }
        return $user;
    }

    /**
     * Close session and db connections. User logs out.
     */
    private function offUser()
    {
        Yii::$app->user->logout();
        Yii::$app->session->close();
        Yii::$app->db->close();
    }


Как по-вашему получить "юзера" более правильно или хотя бы скажите как более правильно получить сессию текущего пользователя?
  • Вопрос задан
  • 843 просмотра
Подписаться 6 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
Полагаю, что лучше токеном. При подключении передаются http-хэдеры. Можно там Bearer передать. Можно и JWT токен использовать наверно. Сама суть важна: авторизация подключения по токену.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы