简介
我正在构建一个firebase Web客户端应用程序。我想设置Firebase数据库规则。
目标/意图
我想在用户不存在或禁用时设置阻止访问(。read或.write)到firebase数据库的规则>在管理控制台/(身份验证/用户)。
有些事情是这样的:
"rules":{
"$uid":{
".write":"auth.isUserActive(auth.uid) == true"
}
}
FIREBASE REFERENCE DOC: https://firebase.google.com/docs/reference/security/database/#auth
问题
我如何达到上述目的?我应该为firebase DB设置哪些规则?
答案 0 :(得分:2)
删除用户不会撤消该用户的现有令牌。见Firebase authentication not revoked when user deleted?。如果您使用其中一个标准身份提供商,这意味着您在删除帐户后仍可以访问数据一小时。
您的代码没有API来检查给定的uid是否仍然存在。即使存在这样的API,在这种情况下它也无济于事,因为恶意用户可以绕过该检查并直接调用API。
处理此方案的一种简单方法是在数据库中保留允许或黑名单的不允许用户的白名单。对于黑名单,您要保留一个禁止/删除用户的顶级(世界可读,仅管理员可写)列表:
banned
uid12345: true
当您的管理员删除用户时,他们也会将其添加到此列表中。
然后在您的安全规则中,您检查并禁止禁止用户访问。 E.g:
"posts": {
".read": "auth != null && !root.child('banned').child(auth.uid).exists()"
}
答案 1 :(得分:0)
您可以按照doc -v2
var FirebaseTokenGenerator = require("firebase-token-generator.js");
var tokenGenerator = new FirebaseTokenGenerator(FIREBASE_SECRET);
var token = tokenGenerator.createToken({ "uid": "1", "hasEmergencyTowel": true });
对于上面创建的令牌,您可以按如下方式编写规则:
{
"rules": {
"frood": {
".read": "auth.hasEmergencyTowel === false"
}
}
}
一旦UID Scope id即将结束,就可以调用它。