如果用户在另一台设备上登录,则自动注销用户
Posted
技术标签:
【中文标题】如果用户在另一台设备上登录,则自动注销用户【英文标题】:Automatically Log a User Out if They Log in on Another Device 【发布时间】:2014-06-21 04:57:42 【问题描述】:我有一个需要用户登录的应用程序。登录是通过对我的后端 REST API 的 POST 请求处理的,如果登录详细信息正确,它会生成一个新的访问令牌并将其返回给应用程序(其中然后保存在钥匙串中)。我的问题是,当用户同时从多个设备登录时,我该如何处理?首先登录的设备不会意识到他们的访问令牌已过期,但会继续尝试发送将被拒绝的请求(因为访问令牌不再与存储在数据库中的访问令牌匹配)。我曾考虑在我的 AppDelegate 中检查访问令牌是否与 viewDidLoad 中的数据库令牌匹配,但这仅在首次加载应用程序时才有效。是否已经为这类事情建立了最佳实践?如果有,那是什么?
到目前为止,我想到的最佳解决方案是每次用户登录时重新发出相同的访问令牌,但这对我来说似乎不安全。这是一种安全的处理方式吗?
【问题讨论】:
听起来您需要与您的服务器人员讨论如何确定令牌是否过期。在我看来,它应该只是服务器返回的“通过其他设备登录”或“令牌过期”错误。 我是服务员。我知道如何告诉客户端令牌已过期,我在询问令牌何时过期以及如何在 ios 端识别/处理过期令牌。 【参考方案1】:最好在每次登录时颁发一个新令牌。令牌是可消耗的,区分不同设备和浏览器上的用户会话很有用(参见Facebook's session management 示例)。
有两种可能的方式来处理双重登录场景:
-
为数据库中的每个用户维护多个活动令牌,并在退出时使每个令牌失效
每个用户只允许一个令牌,使现有令牌在登录时失效
选择取决于您的应用程序的性质。在第二种情况下,第一个客户端在应用程序进行网络调用之前不会知道其会话无效。那时,您的服务器应该返回一个自定义错误以指示令牌已过期。然后应用程序应提醒用户并将他们返回到登录屏幕。
【讨论】:
以上是关于如果用户在另一台设备上登录,则自动注销用户的主要内容,如果未能解决你的问题,请参考以下文章