如何在websockets中使用Yesod的身份验证?

dph*_*son 19 haskell websocket yesod

我想在Yesod应用程序中使用websockets.如果我对websockets包的理解是正确的,这意味着我需要定义一个ServerApp,它是PendingConnection -> IO ()如何处理连接请求的函数,然后使用我的Warp设置的settingsIntercept字段将其插入我的应用程序.如何根据Yesod的身份验证进行处理?例如,如果我想拒绝除以授权用户身份登录的客户端之外的连接,我该如何检测当前登录的用户?因为我们不是在Handler monad中工作,所以似乎我们没有办法调用像maybeAuthId.是手动查看连接请求标头的唯一选择吗?

Rub*_*ero 1

无论您是否使用 Websocket,您仍然必须使用会话来识别/授权服务器端的客户端。

Websockets 可以取代你的 api 路由,但不能取代你的服务器中间件。

当然,一旦客户端在服务器上尝试任何 HTTP 动词(get、post ...),授权和中间件之类的事情就需要处理,一旦 websocket 启动,就不再有中间件运行,客户端应该已经有了一个已识别的会话(如果他已经登录),并且每次客户端通过 Websocket 向服务器请求更多数据时都需要使用该会话。