仅当用户登录时才接受 WAI Websocket 请求



我正在使用wai-websockets软件包(版本3.0.1.1),我只想在用户已经登录的情况下打开套接字。 我有一个中间件可以处理所有身份验证问题,如果用户登录,则会在WAI请求的Vault中放置User记录。

有没有办法从ServerApp访问WAI Request,或者在Request启动之前检查User值?

以下基本结构将允许您在将控制权传递给 websocket 之前分析Request,并允许您根据需要将Request值传递到ServerApp

#!/usr/bin/env stack
-- stack --resolver lts-9.3 script
{-# LANGUAGE OverloadedStrings #-}
import Network.Wai
import Network.Wai.Handler.Warp
import Network.Wai.Handler.WebSockets
import Network.HTTP.Types
import Network.WebSockets.Connection
main :: IO ()
main = run 3000 $ req send ->
case websocketsApp defaultConnectionOptions _serverApp req of
    Nothing -> send $ responseLBS status200 [] "Websockets not supported"
    Just res -> send res