我正在使用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