如何设置Firebase数据库规则?如何防止已删除用户的.write

介绍

我正在构建一个firebase Web客户端应用程序.我想设置Firebase数据库规则.

>新用户注册到firebase应用程序. Firebase给了他一个user.UID.
>然后,管理员删除或禁用用户从firebase管理控制台.
>用户刷新客户端应用.
>(我发现)用户仍然可以写入firebase数据库,即使他的帐户已被删除/禁用.

.

目标/意图

我想设置一个规则,当用户不存在时,阻止访问(.read OR .write)到firebase数据库,或者在管理控制台/(auth / users)中禁用.

有点像这样:

"rules":{
  "$uid":{
    ".write":"auth.isUserActive(auth.uid) == true"
  }
}

.

FIREBASE REFERENCE DOC:https://firebase.google.com/docs/reference/security/database/#auth

我怎样才能达到上述目的?我应该为firebase DB设置哪些规则?

最佳答案 删除用户不会撤消该用户的现有令牌.请参阅
Firebase authentication not revoked when user deleted?.如果您使用的是标准身份提供商之一,则表示用户在删除帐户后仍可以访问数据一小时.

您没有用于检查给定uid是否仍然存在的代码的API.即使存在这样的API,在这种情况下它也无济于事,因为恶意用户可以绕过该检查并直接调用API.

处理此方案的一种简单方法是在数据库中保留允许或不允许用户黑名单的白名单.对于黑名单,您将保留一个禁用/删除用户的顶级(世界可读,仅管理员可写)列表:

banned
  uid12345: true

当您的管理员删除用户时,他们也会将其添加到此列表中.

然后在您的安全规则中,您检查并禁止禁止用户访问.例如.:

"posts": {
  ".read": "auth != null && !root.child('banned').child(auth.uid).exists()"
}
点赞