如何在Firebase身份验证中检查用户是否已禁用

Pra*_*ari 5 android firebase firebase-authentication

我有一个使用Firebase Auth实现的登录系统,但每当我禁用任何用户时,他/她仍然可以被记录.

但是当他/她退出并自己登录他/她时,禁用系统正在工作.

那么每次检查用户是否被禁用,我应该怎么做?有什么功能吗?

谢谢.

Ale*_*amo 7

如果您disabledelete用户帐户并不意味着它也会触发auth state change.它也不应该,因为用户仍然在应用程序中进行身份验证.您需要知道,在最多一个小时内,Firebase Authentication将尝试刷新已禁用或删除的特定用户的访问令牌.但在这种情况下,刷新将失败,此时用户将变为未经身份验证.这是auth状态更改事件将触发的点.

如果要立即撤消用户的授权,则必须在应用程序逻辑的另一部分中执行此操作.Firebase的一个常见做法是在数据库中创建一个新节点,该节点blacklist应如下所示:

Firebase-root
   |
   --- bannedUsers
          |
          uidOfBannedUser: true
Run Code Online (Sandbox Code Playgroud)

现在,当您在Firebase控制台中删除/禁用用户帐户时,还需要将coreponding uid添加到数据库中禁止用户的列表中.

然后,借助Firebase数据库安全规则,可以保护数据库免受未授权用户的访问.这可以通过向数据库安全规则添加一个子句来完成,如下所示:

{
  "rules": {
    "bannedUsers": {
      ".read": true,
      ".write": false // only admins can write these
    },
    "messages": {
      ".read": "auth != null && !root.child('bannedUsers').child(auth.uid).exists()"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如果使用不同的后端,则实现方式会有所不同.可以有更多示例,但像这样的黑名单是禁止用户的常用方法.你会发现你甚至可能对他们只禁止它们的身份验证关注不够,而不是删除他们可以简单地重新创建的凭据.

  • 信息非常丰富,但必须在 Firebase 规则之外添加该逻辑让我有点呕吐。难道不应该有一个“auth.disabled”属性让我们可以在规则声明中简单地检查吗?阿尔夫! (2认同)

gre*_*y87 6

您可以勾选FirebaseUser.reload()-手动刷新当前用户的数据(例如,附加的提供者、显示名称等)

FirebaseAuthInvalidUserException 如果当前用户的帐户已被禁用、删除或其凭据不再有效,则抛出