我发现了这个问题:Firebase Permission Denied,其中提到使用此JSON代码:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
它仅允许经过身份验证的用户访问读取或写入。这对我来说非常合适。
唯一的问题是此答案已过时。据我所知,他们不再使用JSON。
当前我的规则如下:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
如何像我以前的问题一样,仅允许使用我已提供并加载到应用中的“ API密钥”对用户进行读写访问?
编辑,我现在知道Firebase Realtime数据库使用JSON规则,而Firebase Firestore使用实际的Firebase安全规则语言。
因此,在意识到这一点之后,我将所有规则都设置为auth!= null。
实时数据库规则:
{
"rules": {
"users": {
".read": "auth != null",
".write": "auth != null"
}
}
}
还有云存储规则,以防万一:
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
我没有发现我做错了什么,我直接正确发送了API密钥,我只是为了测试对其进行了记录,我所有的引用都是正确的...
我不明白。...
编辑:代码
const firebase = require('firebase');
var config = {
apiKey: "(Key removed... for obvious reasons)",
authDomain: "discord-trust.firebaseapp.com",
databaseURL: "https://discord-trust.firebaseio.com",
storageBucket: "discord-trust.appspot.com"
};
firebase.initializeApp(config);
... Lots of code between these two ...
case `testWriteReputation`: {
if (msg.author.bot) return;
if (msg.author.id === bot.user.id) return;
firebase.database().ref(`BasicUserData/${msg.author.id}`).set({
lastLoggedUsername: msg.author.tag,
lastLoggedAvatar: msg.author.avatar,
lastLoggedDiscriminator: msg.author.discriminator,
userAccountCreated: msg.author.createdAt,
userIdentifier: msg.author.id
});
break;
}
再次在此处找到完整的javascript文件,并且删除了api键:https://hatebin.com/egchvudbew
答案 0 :(得分:1)
如doc中所述,如果要在实时数据库安全性规则中使用auth
变量(允许您按每个用户控制数据访问),则需要使用Firebase Authentication。
用户进行身份验证后,您的实时数据库中的auth变量 规则规则将使用用户的信息填充。这个 信息包括其唯一标识符(uid)以及链接的 帐户数据,例如Facebook ID或电子邮件地址,以及其他 信息。
有关此doc的更多信息,请参见如何开始使用身份验证。
请注意,实时数据库和Firestore是两个完全不同的Firebase服务。它们不具有相同的安全规则语法。