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

时间:2014-01-06 09:23:40

标签: haskell websocket yesod

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

1 个答案:

答案 0 :(得分:1)

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

Websockets可以替换您的api路由,但无法替换您的服务器中间件。

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