简介
我正在构建一个 Firebase Web 客户端应用程序。我想设置 Firebase 数据库规则。
- 新用户注册到 Firebase 应用。 Firebase 给了他一个 user.UID。
- 然后,管理员从 Firebase 管理控制台删除或禁用该用户。
- 用户刷新客户端应用。
- (我发现)用户仍然可以写入 Firebase 数据库,即使他的帐户已被删除/禁用。
.
目标/意图
我想设置一条规则,当用户不存在或已禁用阻止访问(.read 或 .write)Firebase 数据库> 在管理控制台/(auth/users) 中。
像这样的事情:
"rules":{
"$uid":{
".write":"auth.isUserActive(auth.uid) == true"
}
}
.
FIREBASE 引用文档: https://firebase.google.com/docs/reference/security/database/#auth
问题
怎样才能达到上述目的呢?我应该为 firebase DB 设置哪些规则?
最佳答案
删除用户不会撤销该用户的现有 token 。请参阅Firebase authentication not revoked when user deleted? 。如果您使用的是标准身份提供商之一,这意味着用户在您删除帐户后一小时内仍然可以访问数据。
没有 API 可供您使用代码来检查给定的 uid 是否仍然存在。即使存在这样的 API,在这种情况下也无济于事,因为恶意用户可以绕过该检查并直接调用 API。
处理这种情况的一个简单方法是在数据库中保留允许用户的白名单或不允许用户的黑名单。对于黑名单,您需要保留一个被禁止/删除的用户的顶级(世界可读,管理员只能写入)列表:
banned
uid12345: true
当您的管理员删除用户时,他们也会将其添加到此列表中。
然后在您的安全规则中,您检查并禁止被禁止的用户访问。例如:
"posts": {
".read": "auth != null && !root.child('banned').child(auth.uid).exists()"
}
关于firebase - 如何设置Firebase数据库规则?如何防止已删除用户的.write,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38195656/