如何删除使用Firebase认证登录多个设备的单个用户凭据



我有一个Firebase认证帐户,并使用相同的帐户登录多个设备。问题是如果我在一台设备上删除我的账号,我需要在所有设备上删除该账号。我该怎么做呢?

删除账号的代码:

mAuth.signOut()
mAuth.currentUser?.delete()

您遇到的是预期的行为。在某些情况下,例如您的getCurrentUser()方法将返回一个非空的FirebaseUser对象,但这并不意味着底层令牌仍然有效。例如,如果用户删除设备上的FirebaseUser,而其他设备上的本地令牌没有刷新,则通常会发生这种情况。这正是你正在经历的。在这种情况下,您将获得一个有效的FirebaseUser对象,但是对经过身份验证的资源的后续调用(例如尝试刷新令牌)将失败,因为令牌不再有效。

为了克服这种情况,我建议你阅读我在以下帖子中的回答:

  • 已删除的用户可以访问Firebase Firestore

此外,如果使用:

删除FirebaseUser
mAuth.currentUser?.delete()

没有必要调用:

mAuth.signOut()

因为delete()方法:

从Firebase项目的数据库中删除用户记录。如果操作成功,用户将注销.

Firebase身份验证基于ID令牌,该令牌在生成后一小时内有效。

因此,当您在一个设备上删除用户时,其他设备上的令牌可能仍然有效长达一个小时。你真的不需要在所有设备上删除帐户,但在其他设备也显示用户已注销之前可能需要长达一个小时的时间。

如果在您的用例中不需要这样做,您可能需要阅读有关管理用户会话的文档。您可以像上面所示的那样撤销ID令牌(如果您知道它们),或者(更简单)向数据库中的所有客户机发出UID已被删除的信号。

最新更新