我们有使用 Cognito 进行身份验证的 React Native 应用程序。我们希望防止同一用户 ID 从多个设备同时登录。
我们希望我们可以为此使用 Cognito 预身份验证触发器。不幸的是,我们似乎不能只调用globalSignOut
。对于用户来说,因为这不会使已发布且当前处于事件状态的 token 无效(请参阅 https://github.com/amazon-archives/amazon-cognito-identity-js/issues/21#issuecomment-331472144 )。
另一个想法是如果用户在其他地方登录,则拒绝登录。但是我们看不到一种可靠的方法来判断用户是否已经登录。我们可以查看是否有为该用户颁发的有效 token ,但不能查看它们当前是否与事件 session 相关联。
我们还考虑维护我们自己的事件 session 数据库,但没有注销触发器,因此我们不知道何时从数据库中删除 session 。
最佳答案
您可以使用 token 认证系统,
为每次登录发出一个全新的 token ,并检查可用的 token 。
如果有任何 token 可供用户使用,这意味着他/她已登录其他设备,对于这种情况,您可以提示用户 您已登录其他设备。您确定要从该设备注销吗? 单击是后,您可以清除该用户的所有 token 。并发行全新的代币。
自动登出 :该 token 应该在整个后端传递,即在每个 API 调用 token 的 header 中都应该存在......并且应该在后端执行任何操作之前进行检查。如果 token 不可用,则抛出 401 .如果有任何 API 抛出 ,则在您的应用中401 那么这意味着用户是未经授权 并且应该被注销。
或者
您的应用程序应该正在监听一个套接字,该套接字在收到相同的消息时会响应注销。因此,每当您的用户登录时,将通过套接字传递注销消息,并且具有某些 token ID 或唯一 ID 的适当设备将收到该消息,并将从所有其他设备注销特定用户。
或者
有一个通知接收器,它将用于在必要时与套接字相同的注销。
关于amazon-web-services - 使用 Cognito 防止多个同时登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55303282/