ruby-on-rails - 允许用户一次从一台设备登录
问题描述
我一直在谷歌上搜索是否可以限制用户一次从一台设备登录的答案。
假设有一个 Web 应用程序(Ruby on Rails 应用程序)允许一个用户一次从一台设备登录。如何实现?
要解决这个问题,我认为首先要识别一个设备。也许是通过它的 Mac 地址,但我没有找到任何方法从浏览器发出的用户请求中获取设备的 Mac 地址。
我也考虑request.remote_ip
过,但这对于连接到一个 Wi-Fi 的多个设备可能是相同的。
如果有人能就可能的解决方案分享一些想法,那将非常有帮助。谢谢!
解决方案
你不能依赖request.remote_ip
任何一个。由于 NAT,单个 IP 地址可以共享给多个用户和/或设备,例如 - 常见情况是家庭路由器或蜂窝数据。
但是您可以在用户登录时生成一个唯一的会话 ID/令牌,并将其存储在 cookie 和服务器端,然后检查它。当用户从第二台设备登录时 - 这将覆盖前一个令牌,而后一个会话将成为唯一允许用户使用的会话。或者,您可以根据您的逻辑在前一个会话存在(未终止或超时)时拒绝第二次登录。
对于devise
gem,有devise-security
gem 提供:session_limitable
了实现第一个会话变得不可用的规则的策略。
推荐阅读
- json - 如何使用 Python 请求将带有额外 JSON 的文件数据发布到 REST API?
- spring - 在远程 jenkins 构建中使用 URL 指定默认参数
- python-3.x - pytest:在包含多个测试的模块中执行一次操作
- php - 如何在 Laravel 5.8 中将某些表和数据从 Db A 复制到 Db B?
- python - 查找每天的最大值和小时(python,pandas)
- kubernetes - Kubernetes https 入口规则
- python - 如何在字典中循环
- python - 如何在python中迭代字典对象
- java - 房间 - 错误无法比拟的类型:int 和
- python-3.x - 使用 pyinstaller 创建 .exe 的问题