node.js - 如果同一用户从不同的浏览器或计算机登录,则强制注销。 Node.js + Express + Socket.IO

标签 node.js authentication express socket.io logout

场景:考虑一个登录系统 ( Node.js + Express + Socket.IO ),它匹配用户名和密码并允许用户访问经过身份验证的页面。登录系统将 session ID 作为 cookie 存储在客户端,并在服务器上对每个经过身份验证的页面请求进行验证,并相应地允许/禁止。

问题:现在,假设同一用户从不同的计算机或浏览器登录,我希望以前的用户推送到 session 过期页面并显示信息,例如:“您可能从不同的浏览器或机器登录。请不要共享密码。有关更多信息,请访问:SomeLinkHere"

注意:我只是不想使用户登录 session 无效,当用户从不同的浏览器或计算机登录时,我想将用户推送到 session 过期页面,即使用户是不点击任何链接或请求任何进一步验证的页面。

这背后的主要意图:避免出现以下情况:“如果用户正在观看一些敏感数据,例如实时报告(即 socket.io 上的仪表板)并共享其密码给其他人。”

问题:由于socket.io已经用于报告实时数据,如何在不使现有socket.io连接重载的情况下实现这一点?

最佳答案

这可以通过使用来完成。

  1. 当应用程序中的用户经过身份验证时,客户端在进行连接时也会通过 connect 函数调用传递用户 ID(或任何其他唯一标识符)。 喜欢:

    socket.on('connect', function(){
      socket.emit('adduser', userID);
    });
    
  2. 在服务器上保留一个 JSON 数组,用于保存与用户 ID 信息关联的套接字。 喜欢:

    [{'USERID1':'SOCKETID1'},{'USERID2':'SOCKETID2'}....,{'USERIDN':'SOCKETIDN'}]
    
  3. 当新用户进行套接字连接时,我们检查用户 ID 是否已存在于数组中。 喜欢

    socket.on('adduser', checking function here);
    
  4. 如果已经存在,则强制现有的断开连接 并将 JSON 数组中的 socketid 更新为新的。

    这是一个reference

关于node.js - 如果同一用户从不同的浏览器或计算机登录,则强制注销。 Node.js + Express + Socket.IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15220324/

相关文章:

node.js - vhost ip filter express Node

linux - 如何在 Red Hat Linux 上将 Node.js 应用程序设置为服务

javascript - 无法使 socket.io 在 HTTPS 上工作

node.js - Express 命令在终端中不起作用

javascript - 在学习 FeathersJS 之前需要先学习 ExpressJS 吗?

c# - TCP 服务器仅适用于 localhost 方案

java - 如何自动化基本身份验证 chrome 警报

php - laravel 5.2 登录后重定向到预期的网址

c# - 从事件目录中检索组下的用户列表时出错(C# 中的 System.DirectoryServices.AccountManagement)

javascript - Angular,使用express和mySql向客户端显示数据