Подтвердить что ты не робот

Как использовать аутентификацию Yesod с помощью websockets?

Я хочу использовать websockets в своем приложении Yesod. Если мое понимание пакета websockets верное, это означает, что мне нужно будет определить ServerApp, который является функцией PendingConnection -> IO () для того, как обрабатывать запросы на соединение, а затем подключить его к моему приложению, используя поле settingsIntercept моих настроек Warp. Как я могу сделать обработку зависимой от аутентификации Yesod? Например, если я хотел отклонить подключения, кроме как от клиентов, которые вошли в систему как авторизованные пользователи, как я могу обнаружить текущего пользователя в системе? Поскольку мы не работаем в монаде Handler, кажется, что у нас нет способа вызвать функции типа maybeAuthId. Это единственная альтернатива ручному просмотру заголовков запроса на соединение?

4b9b3361

Ответ 1

Если вы используете веб-порты или нет, вам все равно придется использовать сеансы для распознавания/авторизации клиентов на стороне сервера.

Websockets может заменить ваши маршруты api, но не может заменить ваше промежуточное программное обеспечение сервера.

И, конечно же, такие вещи, как авторизация и промежуточное программное обеспечение, - это то, что вы обрабатываете, когда клиент пытается использовать HTTP-глагол на вашем сервере (get, post...), как только веб-раскладка вверх, больше нет промежуточного программного обеспечения, а клиент должен уже иметь идентифицированный сеанс, если он уже вошел в систему, и этот сеанс - это то, что вам нужно использовать каждый раз, когда клиент запрашивает у сервера дополнительные данные через веб-узел.