2017-07-07 99 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

相关问题