我想在我的 Yesod 应用程序中使用 websockets。如果我对 websockets 包的理解是正确的,这意味着我需要定义一个 ServerApp,它是一个函数 PendingConnection -> IO ()
了解如何处理连接请求,然后使用我的 Warp 设置的 settingsIntercept 字段将其插入我的应用程序。如何使处理依赖于 Yesod 的身份验证?例如,如果我想拒绝以授权用户身份登录的客户端以外的连接,我如何检测当前登录的用户?由于我们不是在 Handler monad 中工作,似乎我们没有办法调用像 maybeAuthId
这样的函数。 .是手动查看连接请求 header 的唯一选择吗?
最佳答案
无论您是否使用 websockets,您仍然必须使用 session 来识别/授权服务器端的客户端。
Websockets 可以替换您的 api 路由,但不能替换您的服务器中间件。
当然,一旦客户端在您的服务器上尝试任何 HTTP 动词(get、post ...),您就可以处理诸如授权和中间件之类的事情,一旦 websocket 启动,就没有更多的中间件在运行并且客户端应该已经有了如果他已经登录,则为已识别的 session ,并且每次客户端通过 websocket 向服务器请求更多数据时,您都需要使用该 session 。
关于haskell - 如何将 Yesod 的身份验证与 websockets 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20946690/