首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Firebase Auth中检查用户是否已禁用

如何在Firebase Auth中检查用户是否已禁用
EN

Stack Overflow用户
提问于 2017-11-11 16:09:46
回答 3查看 6.3K关注 0票数 14

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

但是当他/她注销并单独登录他/她时,禁用系统就开始工作了。

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

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-05 21:15:59

您可以通过FirebaseAuth.getInstance().getCurrentUser().reload();FirebaseUser.reload()检查状态--代码手动刷新当前用户的数据(例如,附加提供程序、显示名称等)。

在Android中,如果第一个电子邮件帐户在Firebase身份验证仪表板中被禁用&在您的Android代码中,上面的.reload()被禁用,那么下一个FirebaseAuth.getInstance().getCurrentUser();调用将返回一个null。

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

票数 14
EN

Stack Overflow用户

发布于 2017-11-13 16:05:27

编辑:2022年4月20日

由于答案是旧的,我将添加另一种方法,即调用FirebaseUser#reload()方法,该方法:

手动刷新当前用户的数据(例如,附加提供程序、显示名称等)。

因此,当调用reload()方法时,这意味着我们从Firebase服务器重新加载用户的配置文件数据。另外要提到的是,如果以下情况,将引发FirebaseAuthInvalidUserException

当前用户的帐户已被禁用或删除,或其凭据不再有效。

但请记住,这也并不意味着状态发生了变化。您需要显式地调用此方法,例如,当用户打开应用程序时。还请记住,该方法是异步的,它返回一个Task对象。因此,您需要附加一个侦听器,以便从服务器获取新的配置文件数据。

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

如果您想立即撤销用户的授权,则必须在应用程序逻辑的另一部分中这样做。对于Firebase,常见的做法是在数据库中创建一个名为blacklist的新节点,它应该如下所示:

代码语言:javascript
运行
复制
Firebase-root
   |
   --- bannedUsers
          |
          uidOfBannedUser: true

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

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

代码语言:javascript
运行
复制
{
  "rules": {
    "bannedUsers": {
      ".read": true,
      ".write": false // only admins can write these
    },
    "messages": {
      ".read": "auth != null && !root.child('bannedUsers').child(auth.uid).exists()"
    }
  }
}

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

票数 18
EN

Stack Overflow用户

发布于 2020-11-23 06:26:05

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47239979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档