2014-03-18 19 views
0

在sockjs github頁面上寫入 - cookies不能用於用戶認證。在哪裏我可以閱讀有關在sockjs中驗證用戶的方法,這是可取的。我不想使用socket.io。用快遞和sockjs進行用戶認證

回答

3

你可以在redis和sockjs中使用基於標記的方法。在高層次上,過程可以像這樣工作:

  1. 客戶端首先通過常規HTTP請求從服務器請求令牌(實現爲uuid)。這通過express的中間件路由請求,並且可以輕鬆訪問cookie和所有會話數據。
  2. 生成令牌時,它將作爲鍵值對存儲在redis中,其中令牌是鍵,會話數據是值。
  3. 然後將令牌傳回給用戶,在進行初始連接「升級」請求時,sockjs客戶端作爲GET參數附加到url。
  4. 當sockjs服務器收到授權請求而不是驗證cookie時,它解析URL,彈出令牌並嘗試查詢由令牌鍵入的鍵值對的redis。如果redis查詢失敗或返回空數據,則拒絕授權請求。如果redis請求成功,那麼您可以完全訪問所有會話數據,現在您可以刪除redis中的鍵值對。

這裏可能存在的問題是,您需要在每個連接請求上要求新的令牌。否則,它會嘗試使用相同的標記。如果您在驗證它們後刪除令牌,則會阻止套接字重新連接。根據您的應用程序,這可能是所需的行爲。這是爲我們的,所以我們保持原樣,但仍然值得了解。

+1

最初,當我寫這篇文章時,我使用了socket.io,並在此假設可以在websocket升級請求中傳遞查詢參數。這對於s​​ockjs來說實際上是不可能的,所以我們編寫了一個處理大部分這些東西的庫,並且歡迎您使用它。 https://www.npmjs.org/package/node-token-sockjs – aembke