Rob*_*ine 105 javascript firebase firebase-security firebase-realtime-database
我对编码比较新,遇到了麻烦.
我有这个代码将数据发送到firebase
app.userid = app.user.uid
var userRef = app.dataInfo.child(app.users);
var useridRef = userRef.child(app.userid);
useridRef.set({
locations: "",
theme: "",
colorScheme: "",
food: ""
});
Run Code Online (Sandbox Code Playgroud)
但是,我一直收到错误:
FIREBASE警告:设置为/ users /(GoogleID)失败:permission_denied 2016-05-23 22:52:42.707 firebase.js:227未捕获(承诺)错误:PERMISSION_DENIED:权限被拒绝(...)
当我试着查看它时,它会讨论Firebase的规则,它似乎是一种我还没有学过的语言(或者它只是在我脑海中).有人可以解释导致问题的原因吗?我以为是我要求它存储电子邮件和用户显示名称而你只是不允许这样做,但当我把它拿出来时我仍然遇到同样的问题.有没有办法在没有设定规则的情况下避免这种错误,或者规则是我可以教自己如何在一天内写作,或者我是否只是走出了我的联盟?
谢谢你的帮助!
Fra*_*len 225
默认情况下,新Firebase控制台中项目中的数据库只能由经过身份验证的用户读取/写入:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
Run Code Online (Sandbox Code Playgroud)
由于您未从代码中签入用户,因此数据库拒绝您访问数据.要解决这个问题,您需要允许对数据库进行未经身份验证的访问,或者在访问数据库之前登录用户.
目前最简单的解决方法(直到教程更新)是进入项目控制台的Database面板,选择Rules选项卡并用以下规则替换内容:
{
"rules": {
".read": true,
".write": true
}
}
Run Code Online (Sandbox Code Playgroud)
这使得您的新数据库可由任何知道数据库URL的人读取和写入.在投入生产之前,请务必再次保护您的数据库,否则有人可能会开始滥用它.
对于(稍微)更耗时但更安全的解决方案,请调用Firebase身份验证signIn...方法之一以确保用户在访问数据库之前已登录.最简单的方法是使用匿名身份验证:
firebase.auth().signInAnonymously().catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// ...
});
Run Code Online (Sandbox Code Playgroud)
然后在检测到登录时附加您的听众
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.
// ...
}
// ...
});
Run Code Online (Sandbox Code Playgroud)
jus*_*ird 64
我遇到了类似的问题,发现这个错误是由于为实时数据库设置了不正确的读/写操作规则.默认情况下,google firebase现在加载云存储而不是实时数据库.我们需要切换到实时并应用正确的规则.
我们可以看到它说云Firestore不是实时数据库,一旦切换到正确的数据库应用以下规则:
{
"rules": {
".read": true,
".write": true
}
}
Run Code Online (Sandbox Code Playgroud)
lil*_*mad 34
WORKING!!
Go to the "Database" option you mentioned.
1. There on the Blue Header you'll find a dropdown which says Cloud Firestore Beta
2. Change it to "Realtime database"
3. Go to Rules and set .write .read both to true
Let me know how it goes.
copied from
https://github.com/firebase/quickstart-js/issues/239
Run Code Online (Sandbox Code Playgroud)
小智 9
转到数据库,标题旁边有2个选项:
Cloud Firestore,实时数据库
选择实时数据库并转到规则
将规则更改为true.
这解决了我的问题.
| 归档时间: |
|
| 查看次数: |
115614 次 |
| 最近记录: |