我有一个需要用户登录的应用程序。登录是通过对我的后端 REST API 的 POST 请求处理的,如果登录详细信息正确,它会生成一个新的访问 token 并将其返回给应用程序(然后保存在钥匙串(keychain)中)。我的问题是,如何处理用户同时从多个设备登录的情况?第一个登录的设备不会意识到他们的访问 token 已过期,但会继续尝试发送将被拒绝的请求(因为访问 token 不再与数据库中存储的相匹配)。我考虑过检查访问 token 是否与我的 AppDelegate 中 viewDidLoad 中的数据库 token 相匹配,但这仅在首次加载应用程序时有效。是否已经为这类事情建立了最佳实践?如果有,那是什么?
到目前为止,我想到的最佳解决方案是在每次用户登录时重新发出相同的访问 token ,但这对我来说似乎不安全。这是一种安全的处理方式吗?
最佳答案
在每次登录时颁发新 token 是一种很好的做法。 token 是可消耗的,区分不同设备和浏览器上的用户 session 很有用(参见 Facebook's session management 示例)。
有两种可能的方式来处理双重登录场景:
- 为数据库中的每个用户维护多个事件 token ,并在注销时使每个 token 失效
- 每个用户只允许一个 token ,在登录时使现有 token 无效
选择取决于您的应用程序的性质。在第二种情况下,第一个客户端在应用程序进行网络调用之前不会知道其 session 无效。届时,您的服务器应返回自定义错误以指示 token 已过期。然后,该应用应提醒用户并将他们返回到登录屏幕。
关于ios - 如果用户在另一台设备上登录,则自动注销用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23463187/