我有一个Firebase认证帐户,并使用相同的帐户登录多个设备。问题是如果我在一台设备上删除我的账号,我需要在所有设备上删除该账号。我该怎么做呢?
删除账号的代码:
mAuth.signOut()
mAuth.currentUser?.delete()
您遇到的是预期的行为。在某些情况下,例如您的getCurrentUser()方法将返回一个非空的FirebaseUser对象,但这并不意味着底层令牌仍然有效。例如,如果用户删除设备上的FirebaseUser,而其他设备上的本地令牌没有刷新,则通常会发生这种情况。这正是你正在经历的。在这种情况下,您将获得一个有效的FirebaseUser对象,但是对经过身份验证的资源的后续调用(例如尝试刷新令牌)将失败,因为令牌不再有效。
为了克服这种情况,我建议你阅读我在以下帖子中的回答:
- 已删除的用户可以访问Firebase Firestore
此外,如果使用:
删除FirebaseUsermAuth.currentUser?.delete()
没有必要调用:
mAuth.signOut()
因为delete()方法:
从Firebase项目的数据库中删除用户记录。如果操作成功,用户将注销.
Firebase身份验证基于ID令牌,该令牌在生成后一小时内有效。
因此,当您在一个设备上删除用户时,其他设备上的令牌可能仍然有效长达一个小时。你真的不需要在所有设备上删除帐户,但在其他设备也显示用户已注销之前可能需要长达一个小时的时间。
如果在您的用例中不需要这样做,您可能需要阅读有关管理用户会话的文档。您可以像上面所示的那样撤销ID令牌(如果您知道它们),或者(更简单)向数据库中的所有客户机发出UID已被删除的信号。