我正在try 使用插座.IO在 node 中.js,我试图让服务器 for each 套接字提供一个标识.IO客户端.由于套接字代码不在http服务器代码的范围内,因此无法轻松访问发送的请求信息,因此我假设需要在连接期间发送.最好的方法是什么
1) 向服务器获取有关谁正在通过套接字连接的信息.木卫一
2) 验证他们说自己是谁(我目前正在使用Express,如果这能让事情变得更容易的话)
我正在try 使用插座.IO在 node 中.js,我试图让服务器 for each 套接字提供一个标识.IO客户端.由于套接字代码不在http服务器代码的范围内,因此无法轻松访问发送的请求信息,因此我假设需要在连接期间发送.最好的方法是什么
1) 向服务器获取有关谁正在通过套接字连接的信息.木卫一
2) 验证他们说自己是谁(我目前正在使用Express,如果这能让事情变得更容易的话)
使用connect redis并将redis用作所有经过身份验证的用户的会话存储.确保在身份验证时向客户端发送密钥(通常是req.sessionID).让客户端将此密钥存储在cookie中.
在socket connect(或以后任何时候)上,从cookie中获取此密钥并将其发送回服务器.使用此键在redis中获取会话信息.(拿到 keys )
如:
服务器端(以redis作为会话存储):
req.session.regenerate...
res.send({rediskey: req.sessionID});
客户端:
//store the key in a cookie
SetCookie('rediskey', <%= rediskey %>); //http://msdn.microsoft.com/en-us/library/ms533693(v=vs.85).aspx
//then when socket is connected, fetch the rediskey from the document.cookie and send it back to server
var socket = new io.Socket();
socket.on('connect', function() {
var rediskey = GetCookie('rediskey'); //http://msdn.microsoft.com/en-us/library/ms533693(v=vs.85).aspx
socket.send({rediskey: rediskey});
});
服务器端:
//in io.on('connection')
io.on('connection', function(client) {
client.on('message', function(message) {
if(message.rediskey) {
//fetch session info from redis
redisclient.get(message.rediskey, function(e, c) {
client.user_logged_in = c.username;
});
}
});
});