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

时间:2017-11-11 16:09:46

标签: android firebase firebase-authentication

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

但当他/她退出并自己登录时,禁用系统正在运行。

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

感谢。

3 个答案:

答案 0 :(得分:6)

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

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

Firebase-root
   |
   --- bannedUsers
          |
          uidOfBannedUser: true

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

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

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

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

答案 1 :(得分:3)

您可以检查&dyn-手动刷新当前用户的数据(例如,附加的提供程序,显示名称等)

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

答案 2 :(得分:0)

将FirebaseUser.reload()与onCompleteListener一起使用,如果此侦听器返回失败,则显示提示并注销用户或移至登录页面