为了账号安全,请及时绑定邮箱和手机立即绑定

Firebase权限被拒绝

Firebase权限被拒绝

翻翻过去那场雪 2019-08-31 15:52:31
我对编码比较新,遇到了麻烦。我有这个代码将数据发送到firebaseapp.userid = app.user.uidvar 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的规则,它似乎是一种我还没有学过的语言(或者它只是在我脑海中)。有人可以解释导致问题的原因吗?我以为是我要求它存储电子邮件和用户显示名称而你只是不允许这样做,但当我把它拿出来时我仍然遇到同样的问题。有没有办法在没有设定规则的情况下避免这个错误,或者是规则,我可以教自己如何写一天,或者我只是走出了我的联盟?谢谢你的帮助!
查看完整描述

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.

    // ...

  }

  // ...

});


查看完整回答
反对 回复 2019-08-31
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

我遇到了类似的问题,发现这个错误是由于为实时数据库设置了不正确的读/写操作规则。默认情况下,google firebase现在加载云存储而不是实时数据库。我们需要切换到实时并应用正确的规则。


https://img1.sycdn.imooc.com//5d6a27630001bfc806560225.jpg


我们可以看到它说云Firestore不是实时数据库,一旦切换到正确的数据库应用以下规则:


{

   "rules": {

       ".read": true,

       ".write": true

     }

 }


查看完整回答
反对 回复 2019-08-31
  • 3 回答
  • 0 关注
  • 709 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号