我使用Firebase Auth实现了登录系统,但每当我禁用任何用户时,他/她仍然可以被记录。
但当他/她退出并自己登录时,禁用系统正在运行。
那么每次检查用户是否被禁用都应该怎么做? 有什么功能吗?
感谢。
答案 0 :(得分:6)
如果您disable
或delete
用户帐户并不意味着它也会触发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一起使用,如果此侦听器返回失败,则显示提示并注销用户或移至登录页面