haskell websocket yesod

haskell - ¿Cómo puedo usar la autenticación de Yesod con websockets?



(1)

Ya sea que use websockets o no, todavía tiene que usar sesiones para reconocer / autorizar clientes en el lado del servidor.

Websockets podría reemplazar sus rutas de api pero no puede reemplazar el middleware de su servidor.

Y, por supuesto, cosas como la autorización y el middleware es algo que usted maneja una vez que el cliente está probando cualquier Verbo HTTP en su servidor (obtener, publicar ...), una vez que el websocket está activo, no hay más middleware ejecutándose y el cliente ya debería tener una sesión identificada si ya inició sesión, y esa sesión es lo que necesita usar cada vez que el cliente le pide al servidor más datos a través del websocket.

Quiero hacer uso de websockets en mi aplicación Yesod. Si mi comprensión del paquete websockets es correcta, esto significa que tendré que definir una ServerApp, que es una función PendingConnection -> IO () para PendingConnection -> IO () cómo manejar las solicitudes de conexión, y luego conectarlo a mi aplicación usando el campo settingsIntercept de mi Ajustes de deformación. ¿Cómo puedo hacer que el manejo dependa de la autenticación de Yesod? Por ejemplo, si quisiera rechazar las conexiones, excepto los clientes que han iniciado sesión como usuarios autorizados, ¿cómo puedo detectar al usuario que ha iniciado sesión actualmente? Como no estamos trabajando en una mónada de Handler, parece que no tenemos una manera de llamar a funciones como maybeAuthId . ¿Es la única alternativa para mirar manualmente a través de los encabezados de la solicitud de conexión?