首页 > 解决方案 > 限制可以登录网站的用户设备的最佳方法是什么

问题描述

我正在用 Express 和 React 开发一个网站。我想限制每个用户最多登录 3 台设备。

起初,我试图找到获取Mac地址的方法,但我无法在浏览器中获取它。

所以下一次,我尝试为 cookie 生成一个随机字符串,每当更改它时,将其存储在数据库中,然后当我超过 3 行时,触发事件告诉用户无法登录。但在这种情况下,有一个缺点。如果用户手动清除 cookie 或更改浏览器,我无法检测到用户从一台设备登录。当然,我通过 crypto-js 对数据进行加密,这样用户就无法更改它,如果他这样做了,浏览器会生成一个新的 cookie。

      let device = null;
      try{
        device = JSON.parse(CryptoJS.AES.decrypt(cookies.data, SECRET).toString(CryptoJS.enc.Utf8)).device;
      }
      catch{
        console.log("JSON Parse error!");
        // make a new string and store in cookie
        device = randomString.generate(16);
        const data = {device : device, createDate: new Date()}
        setCookie('data', CryptoJS.AES.encrypt(JSON.stringify(data), SECRET).toString());
      }

任何人都可以帮助我吗?请告诉我一个限制用户登录设备的好方法。谢谢。

标签: authenticationlimitdevice

解决方案


无论您保存在浏览器中要跟踪的任何数据,都可以由用户删除。无论是 cookie、本地存储还是索引数据库。因此,您需要一种机制来跟踪设备或实例。一个设备可以有多个浏览器,用户可以同时使用不同的浏览器。

如果您注意到 Gmail 中的一项功能,我们可以尝试类似的想法。Gmail 可以显示所有打开的会话,它允许踢出任何会话。他们是怎么做到的呢?

他们正在使用 Web Sockets。ASP.NET SignalR 或 Socket.IO 可用于此目的。

聊天应用程序使用网络套接字。当你打开你的应用程序时,它会连接到服务器,就像聊天一样,只有一个人可以控制实例。

我相信您需要网络套接字才能正确使用此功能。


推荐阅读