Firebase权限被拒绝

我比较新的编码,有麻烦。

我有这个代码发送数据到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: "" }); 

但是,我不断收到错误:

FIREBASE警告:设置在/ users /(GoogleID)失败:permission_denied 2016-05-23 22:52:42.707 firebase.js:227未捕获(承诺)错误:PERMISSION_DENIED:权限被拒绝(…)

当我试图查看这个问题时,它谈到了关于Firebase的规则,这个规则似乎是我还没有学习的语言(或者只是在我的头上)。 有人可以解释是什么造成这个问题? 我以为是我要求它存储电子邮件和用户显示名称,你只是不允许这样做,但当我把它们拿出来,我仍然有同样的问题。 有没有办法避免这个错误,而没有设定规则,或规则的东西,我可以教自己如何写在一天,或者我刚刚离开我的联盟吗?

感谢您的帮助!

默认情况下, 新的Firebase控制台中的项目中的数据库只能由经过身份validation的用户读取/写入:

 { "rules": { ".read": "auth != null", ".write": "auth != null" } } 

查看Firebase数据库安全规则的快速入门 。

由于您没有从代码中签署用户,因此数据库拒绝您访问数据。 要解决这个问题,您需要允许对数据库进行未经身份validation的访问,或者在访问数据库之前login用户。

允许对数据库进行未经validation的访问

目前最简单的解决方法(直到教程得到更新)是进入项目的控制台的数据库面板,select规则选项卡,并用这些规则replace内容:

 { "rules": { ".read": true, ".write": true } } 

这使得你的新数据库可读和可写每个人。 在投入生产之前,一定要再次保护你的数据库,否则有人可能会开始滥用它。

在访问数据库之前login用户

对于(稍微)更耗时但更安全的解决scheme,请调用Firebase身份validation的signIn...方法之一,以确保在访问数据库之前用户已login。 最简单的方法是使用匿名身份validation :

 firebase.auth().signInAnonymously().catch(function(error) { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; // ... }); 

然后在检测到login时附加您的听众

 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. // ... } // ... });