Socket.IO身份验证

我正在尝试在Node.js中使用Socket.IO,并试图允许服务器为每个Socket.IO客户端赋予一个身份。由于套接字代码不在http服务器代码的范围内,因此无法轻松访问已发送的请求信息,因此我假设在连接期间需要将其发送出去。什么是最好的方法

1)将有关谁通过Socket.IO连接到服务器的信息

2)验证他们说的是谁(如果正在使事情变得更容易,我目前正在使用Express)

回答:

使用connect-

redis并将redis用作所有经过身份验证的用户的会话存储。确保通过身份验证将密钥(通常是req.sessionID)发送给客户端。让客户端将此密钥存储在cookie中。

在套接字连接(或以后的任何时间)上,从cookie中获取此密钥并将其发送回服务器。使用此密钥以redis方式获取会话信息。(获取密钥)

例如:

服务器端(使用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;

});

}

});

});

以上是 Socket.IO身份验证 的全部内容, 来源链接: utcz.com/qa/411647.html

回到顶部