允许用户一次从一台设备登录

时间:2018-10-15 17:09:36

标签: ruby-on-rails web-applications

我一直在搜索Google以寻找答案,以了解是否可以限制用户一次从一台设备登录。

假设有一个Web应用程序(Ruby on Rails应用程序)允许一个用户一次从一台设备登录。如何实现?

要解决此问题,我认为第一件事就是识别设备。也许是通过其Mac地址,但是我没有找到任何方法来从浏览器发出的用户请求中获取设备的Mac地址。

我也考虑过request.remote_ip,但是对于连接到一个Wi-Fi的多个设备来说,可能是相同的。

如果任何人可以分享有关可能解决方案的想法,这将非常有帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

您也不能依靠request.remote_ip。由于存在NAT,因此单个IP地址可以共享给多个用户和/或设备,例如-常见的情况是家用路由器或蜂窝数据。

但是您可以在用户登录时生成唯一的会话ID /令牌,并将其存储在Cookie和服务器端,然后进行检查。当用户从第二个设备登录时-这将覆盖前一个令牌,而后一个会话将成为唯一允许用户使用的会话。或者,您可以根据自己的逻辑,在上一个会话存在(未终止或超时)时拒绝第二次登录。

对于devise宝石,有devise-security宝石提供:session_limitable策略,该策略实现了使第一次会话变得不可用的规则。

答案 1 :(得分:1)

我的个人意见,您不需要特定的唯一ID或其他任何内容。

  

如果用户是首次登录,请生成JWT,UNIQ等令牌并保存   它在数据库中。

     

现在您知道用户已登录,因为令牌字段已被占用。

     

如果用户退出,请杀死令牌并清空令牌字段。

     

从第二个设备开始,尝试登录消息“您已经使用其他设备登录。请从该blabla退出。”

     

如果没有访问权限,则类似于密码重置电子邮件以重置帐户身份验证。

基于令牌,您还可以使用无状态身份验证,将其保留在localstoragecookie中。这是额外的逻辑板。

相关问题