当前位置: 首页 > 面试题库 >

Socket.IO身份验证

赵元白
2023-03-14
问题内容

我正在尝试在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 上的连接进行身份验证。 目前,用户首先通过REST API进行身份验证,然后,我向用户发送一个,其中包含经过身份验证的用户的用户名。打开客户端和服务器之间的连接后,我的计划是从连接的套接字列表中临时删除该套接字,以防止在执行身份验证时在服务器之间接收和发送数据。 在这个身份验证中,我验证令牌,如果令牌有效,我将套接字的id重新添加到已连接套接字的列表中。唯一的问题是

  • 我想知道socket.io身份验证的最佳实践是什么。 Alice发出事件'message',参数包括Bobs、唯一标识符等。Bob在监听Socket.on('message')事件时接收消息。

  • 问题内容: 我可以不用密码就可以将Node应用程序连接到Redis,但是添加密码后,我无所事事。 这是我的代码,摘自一个示例: 在运行应用程序时,我得到以下堆栈跟踪: 生成该行的行是最后一个-如果我注释掉尝试设置RedisStore的尝试,则不会出现任何错误。 我确定密码正确(我可以在redis- cli中进行验证,如果我将密码更改为错误,则可以验证auth回调不会触发)。如果我删除密码并注释掉两

  • 问题内容: 我正在研究一款小型多人游戏。我想介绍身份验证。我正在使用Node.js和Socket.io。 当用户到达该主页时-无论他们是否登录,我都希望他们加入游戏-但他们将无法在其中进行任何操作(仅观看)。 然后我该如何在已经打开的套接字上对用户进行身份验证? 如果他们离开站点并回来,我还能保持身份验证吗?您可以通过网络套接字传递Cookie吗? 编辑 进一步我的问题。我可能想到的一种方法是提供

  • 身份验证 PDF版下载 企业应用中的URL链接可以通过OAuth2.0验证接口来获取员工的身份信息。 通过此接口获取员工身份会有一定的时间开销。对于频繁获取员工身份的场景,建议采用如下方案: 企业应用中的URL链接直接填写企业自己的页面地址; 员工跳转到企业页面时,企业校验是否有代表员工身份的cookie,此cookie由企业生成; 如果没有获取到cookie,重定向到OAuth验证链接,获取员工

  • 我试图使用swift代码在网站上找到这里,但响应是html代码与两个错误:“您必须输入密码!”和“您必须输入用户名!”我是NSURLSession的新手,试图更改用于身份验证的字符串,但无法更改响应。下面是我的代码: 这是控制台响应中的内容: