Amo*_*rni 2 authentication logout node.js express socket.io
场景:考虑一个与用户名和密码匹配的登录系统(Node.js + Express + Socket.IO),并允许用户访问经过身份验证的页面.登录系统将会话ID存储为客户端的cookie,并在服务器上对每个经过身份验证的页面请求进行验证,并相应地允许/禁止.
问题:现在,假设同一用户从不同的机器或浏览器登录,我希望以前的用户推送到会话过期页面并显示信息,例如:"您可能从不同的浏览器或机器登录.请不要分享密码.欲了解更多信息,请访问:SomeLinkHere"
注意:我只是不想让用户登录会话无效,当用户从其他浏览器或机器登录时,我想将用户推送到会话过期页面,即使用户没有点击任何链接或请求任何进一步的身份验证页面.
这背后的主要目的是:避免这样的情况,例如:"如果用户正在观看一些敏感数据,例如实时报告(即socket.io上的仪表板),并将密码分享给其他人."
问题:由于socket.io已经用于报告实时数据,如何在不重载现有socket.io连接的情况下实现这一点?
这可以使用.
由于应用程序中的用户已通过身份验证,而客户端进行连接时,他们还会通过connect Function调用传递userid(或任何其他唯一标识符).喜欢:
socket.on('connect', function(){
socket.emit('adduser', userID);
});
Run Code Online (Sandbox Code Playgroud)在服务器上保留一个JSON数组,用于保持与用户信息关联的套接字.喜欢:
[{'USERID1':'SOCKETID1'},{'USERID2':'SOCKETID2'}....,{'USERIDN':'SOCKETIDN'}]
Run Code Online (Sandbox Code Playgroud)当新用户执行套接字连接时,我们检查用户ID是否已存在于数组中.喜欢
socket.on('adduser', checking function here);
Run Code Online (Sandbox Code Playgroud)如果它已经存在,那么强制现有的断开连接并用新的SSONetid更新JSON数组中的socketid.
这是一个参考
| 归档时间: |
|
| 查看次数: |
2068 次 |
| 最近记录: |