簡體   English   中英

使用Passport與Node-Express和MongoDB進行套接字IO身份驗證的案例

[英]A Case of Socket IO authentication using Passport with Node-Express and MongoDB

這是我的設置-

三個不同的服務器在三個不同的EC2服務器上運行三個不同的節點js應用程序。

服務器1-運行主應用程序。

服務器2-運行管理應用程序。

服務器3-正在運行的服務提供程序應用程序。

每個服務器都使用相同的MongoDB數據庫,因為它們必須共享集合。

所以我有 -

服務器4-數據庫服務器-運行Mongo DB。

在數據庫中,有三個表示三種類型用戶的集合-

1]主要用戶2]管理員用戶3]服務提供商

每種類型的用戶都通過使用不同的客戶端應用程序連接到各自的服務器來登錄自己的nodejs應用程序。

例如,“ 管理員用戶”連接到服務器2並登錄“管理應用程序”。

對於登錄護照,使用session -mongo將會話存儲在Mongo db中。 所有類型的用戶的所有會話都存儲在Mongo DB的同一會話集中。

問題 -

現在,我想使用socket.io實現一個通知系統。 每種類型的用戶在其模型中都有一個通知子文檔數組。 像這樣-

主要用戶架構

              {
                 ....

                 notifications : [{ text : String , date : Date}]

              }

管理員用戶架構

              {
                 ....

                 notifications : [{ text : String , date : Date}]

              }

服務提供商架構

              {
                 ....

                 notifications : [{ text : String , date : Date}]

              }

如果主要用戶預訂特定服務提供商的服務,則首先將存儲服務預訂信息,然后在服務提供商通知數組中放置一個通知。 現在,如果服務提供商在線,則應該將通知推送到服務提供商客戶端應用程序。

為此,我嘗試使用Socket.io。

我的方法

設置用於推送通知的新服務器-

服務器5-通知服務器。

該服務器運行一個socket.io服務器。 每當任何類型的用戶使用相應的客戶端應用程序登錄到相應的node js應用程序時,他都會在成功登錄后連接到該通知服務器。

現在,當MainUser預訂特定服務提供商的服務時,主服務器應用程序會將通知放入其文檔中的特定服務提供商通知數組。 之后,它將向通知服務器發送請求,以在服務提供商的ID指定的頻道上發出通知,以便如果服務提供商在線,他將立即在其客戶端應用程序上接收該通知。

但是,如何確保連接到我的套接字io服務器的用戶合法。 如果任何用戶可以連接到套接字IO服務器並偵聽其他用戶的通道(如果以某種方式獲得其他用戶的ID並獲取其他用戶的所有通知)。我想要的是通知服務器應查看Mongo DB數據庫中的會話集合並檢查連接的用戶是否已通過身份驗證並具有正確的用戶ID。

從您的帖子中,我假設您正在使用express,express-session和socket.io

您可以在socket.io中添加一個中間件,該中間件將您的快速會話鏈接到socket.io套接字。

這里的expressSessionMiddleware是“ express-session”中間件的實例,應與主應用程序中的會話中間件配置相同。

socketio = require "socket.io"
io       = socketio()

io.use (socket, next) ->
    expressSessionMiddleware socket.handshake, {}, next

然后,您將可以訪問socket.handshake.session上的會話

可以在此處找到執行此操作的示例模塊: https : //github.com/xpepermint/socket.io-express-session

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM