我可以写数据,但不能在Firebase中读取

时间:2019-10-08 17:54:04

标签: android firebase

我是Firebase的新手。我对Firebase安全规则有疑问。我可以将数据写入Firebase数据库,但是无法读取写入的数据。 我的数据库看起来像-

user|
    |_uid(auto-generated)
         |
         |_name:Bob
         |_score:100
         |_email:bob@gmail.com

我的firebase数据库规则看起来像-

"user":{
       "$uid":{
              "uname":{

".read":"$uid=== auth.uid",
".write":"$uid=== auth.uid"
                    },
              "score":{
".read":"$uid=== auth.uid",
".write":false
                    },
              "email":{
".read":"$uid=== auth.uid",
".write":"$uid=== auth.uid"
                      }
}}

我已经用模拟器进行了测试,一切(读取和写入)均正常。但是,即使我登录了帐户,也无法从我的应用程序读取信息。 当我将所有读写都设置为真正的上层 $ uid 节点时,所有来自我的应用程序的读写也可以。但是我只允许读给授权人

我已经搜索过stackoverflow,但是对此没有解决方案。

对不起,我的英语写作能力。

2 个答案:

答案 0 :(得分:0)

在使用实时数据库时,处理此问题的最佳方法是创建一个docker ps --filter "ancestor=postgres" -q ,然后将所有授权的uid保存在此子级中,然后按如下所示设置规则:“规则”:

-q

您可以参考此project to see sample implementation

答案 1 :(得分:0)

  1. 如果在用户节点内部创建uid时使用了push(),则authid和uid不相同。它们具有不同的值。请确保您使用了与

    相同的UID
     firebaseauth.getinstance().getcurrentuser().getuid()
    
  2. 如果您想授权人们只对他们的数据做某事,可以使用以下规则。

    {
    "rules": {
    "user": {
       "$uid": {
         ".read": "$uid === auth.uid",
         ".write": "$uid === auth.uid"
       }
      }
     }
    }
    
  3. 您拥有的节点是名称,但是规则上指示的级别是未知的...