2013-03-05 26 views
2

場景:考慮一個登錄系統(Node.js + Express + Socket.IO),它與用戶名和密碼相匹配,並允許用戶訪問已驗證的頁面。登錄系統將會話Id存儲爲客戶端的Cookie,並在每個經過驗證的頁面請求的服務器上對其進行驗證,並相應地允許/禁止。如果同一用戶從不同的瀏覽器或計算機登錄,則強制註銷。 Node.js + Express + Socket.IO

問題:現在,假設相同的用戶登錄,從不同的機器或瀏覽器,我想以前的用戶,推動了會話過期頁面,並顯示信息,例如:「你可以從不同的瀏覽器登錄。或機器,請不要共享密碼欲瞭解更多信息,請訪問:SomeLinkHere」

注:我只是不想無效用戶登錄會話,當從不同的瀏覽器或機用戶登錄,即使用戶沒有點擊任何鏈接或請求任何進一步的身份驗證頁面,我也想將用戶推送到會話過期頁面。

這背後的主要意圖:要避免這樣的情況,例如:「如果用戶正在觀看一些諸如現場報道敏感數據(即上socket.io儀表盤),並分享他的密碼告知他人」

問:由於socket.io已在使用報告實時數據,這怎麼可能沒有超載現有socket.io連接實現?

回答

5

這可以使用。

  1. 如在應用程序中的用戶進行身份驗證,而客戶做他們還通過用戶ID(或任何其他唯一標識符)與連接功能的呼叫連接。 像:

    socket.on('connect', function(){ 
        socket.emit('adduser', userID); 
    }); 
    
  2. 在服務器保持一個JSON陣列保持相關聯的用戶ID信息插座。 像:

    [{'USERID1':'SOCKETID1'},{'USERID2':'SOCKETID2'}....,{'USERIDN':'SOCKETIDN'}] 
    
  3. 當新用戶確實插座式連接器,我們檢查的用戶ID已經存在在數組中。 像

    socket.on('adduser', checking function here); 
    
  4. 如果它已經存在,則迫使現有的斷開 和更新JSON數組新的socketid。

    這裏是一個reference

相關問題