3 回答
TA贡献1820条经验 获得超10个赞
默认情况下,新Firebase控制台中项目中的数据库只能由经过身份验证的用户读取/写入:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
请参阅快速入门以了解Firebase数据库安全规则。
由于您未从代码中签入用户,因此数据库拒绝您访问数据。要解决这个问题,您需要允许对数据库进行未经身份验证的访问,或者在访问数据库之前登录用户。
允许未经身份验证的数据库访问权限
目前最简单的解决方法(直到教程更新)是进入项目控制台的Database面板,选择Rules选项卡并用以下规则替换内容:
{
"rules": {
".read": true,
".write": true
}
}
这使得您的新数据库可由任何知道数据库URL的人读取和写入。在投入生产之前,请务必再次保护您的数据库,否则有人可能会开始滥用它。
在访问数据库之前登录用户
对于(稍微)更耗时但更安全的解决方案,请调用Firebase身份验证signIn...方法之一以确保用户在访问数据库之前已登录。最简单的方法是使用匿名身份验证:
firebase.auth().signInAnonymously().catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// ...
});
然后在检测到登录时附加您的听众
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
var isAnonymous = user.isAnonymous;
var uid = user.uid;
var userRef = app.dataInfo.child(app.users);
var useridRef = userRef.child(app.userid);
useridRef.set({
locations: "",
theme: "",
colorScheme: "",
food: ""
});
} else {
// User is signed out.
// ...
}
// ...
});
TA贡献1871条经验 获得超13个赞
我遇到了类似的问题,发现这个错误是由于为实时数据库设置了不正确的读/写操作规则。默认情况下,google firebase现在加载云存储而不是实时数据库。我们需要切换到实时并应用正确的规则。

我们可以看到它说云Firestore不是实时数据库,一旦切换到正确的数据库应用以下规则:
{
"rules": {
".read": true,
".write": true
}
}
添加回答
举报
