2017-07-07 52 views
0

我正在使用快速會話將用戶登錄到我的網站。當他們登錄時,我可以訪問他們的req.user,其中包含有關用戶的信息,例如用戶名,賬戶年齡等。如何判斷用戶是否從Socket.io事件登錄到網站

的問題是,我需要能夠檢查用戶是否登錄,裏面socket.io事件處理

io.sockets.on('connection', function (socket) { 
    console.log(socket.request.session.id); 
    io.sockets.on('message', function (socket) { 
     //check if user is logged on here and if so broadcast the message to sockets 
    }) 
}); 

的正如你可以看到,我需要能夠訪問REQ .user我不能因爲它在一個socket.io事件處理程序中,有沒有其他的方式可以告訴用戶是否登錄?

+0

你的消息事件從哪裏發出? –

+0

客戶端上的chat.js腳本。 – Undying

回答

0

嗯......說實話我仍然不是100%清楚你在做什麼,而是使用用戶,而不是用戶直接使用套接字(因爲你似乎不需要其他用戶數據除了自己的登錄狀態):

1)您正試圖從連接插座從登錄的用戶的其他登錄的用戶)

將消息發送給所有其他連接插座(即在這種情況下, ,你可能會在你的客戶端JavaScript的某個地方實例化一個套接字,這樣每個新客戶端都會打開一個新的套接字。

因此,要確保所有可用的插座是登錄客戶端,您可以將代碼登錄函數中打開一個新的套接字,並簡單地使用服務器broadcast到所有連接的插座除了發件人:

io.sockets.on('connection', function (socket) { 
    console.log(socket.request.session.id); 
    io.sockets.on('message', function (data) { 
     //check if user is logged on here and if so broadcast the message to sockets 
     socket.broadcast.emit('message', data); 
    }) 

});

2)你正在試圖從一個插座將消息發送到另一個連接的插座(即,從一個用戶到另一個特定的登錄用戶)

類似地,有你插座僅在登錄過程之後打開/。

然後,在你的客戶端,你可以這樣做:

socket.emit('message', "target_id");

,以便在服務器端,你可以這樣做:

socket.on("message", function(id) { 
     socket.to(id).emit("message"); 
} 

是否以任何方式幫助呢?

+0

我不認爲我清楚地解釋了我的問題。我在req.user中有用戶信息,並且我一直在使用它來判斷用戶是否登錄。我需要檢查用戶是否在socket.io連接事件中籤名。 – Undying

+0

哪個用戶?我假設你在原始問題中顯示的代碼段是類似於'server.js',它將爲所有連接的用戶提供服務...... –

+0

是的,但我使用的模塊允許用戶登錄到通過他們的帳戶在一個名爲蒸汽的遊戲平臺上。登錄後,它會保存到req.user和req.session.steamuser。 – Undying

相關問題