2014-01-06 2 views
19

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

ответ

1

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

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

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

Смежные вопросы