2014-01-06 17 views
19

我想在我的Yesod應用程序中使用websockets。如果我對websockets包的理解是正確的,這意味着我需要定義一個ServerApp,它是一個函數PendingConnection -> IO(),用於處理連接請求,然後使用我的Warp設置的settingsIntercept字段將其插入到我的應用程序中。我如何使處理依賴於Yesod的身份驗證?例如,如果我想拒絕除作爲授權用戶登錄的客戶端之外的連接,我如何檢測當前登錄的用戶?由於我們不是在Handler monad中工作,所以似乎我們沒有辦法調用像maybeAuthId這樣的函數。是手動查看連接請求的標題的唯一替代方法嗎?如何使用Yesod的身份驗證與websockets?

回答

1

無論您是否使用websockets,您仍然必須使用會話來識別/授權服務器端的客戶端。

Websockets可以取代你的API路線,但無法取代你的服務器中間件。

當然,像授權和中間件這樣的事情,一旦客戶端正在嘗試服務器上的任何HTTP動詞(get,post ...),一旦websocket沒有運行,並且如果客戶端已經登錄,客戶端應該已經擁有一個已識別的會話,並且每當客戶端通過WebSocket向服務器請求更多數據時,該會話就是您需要使用的。

相關問題