【问题标题】:I can write data but I can't read in Firebase我可以写入数据,但无法在 Firebase 中读取
【发布时间】:2019-10-08 17:54:04
【问题描述】:

我是 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上搜索过了,但是没有解决办法。

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

【问题讨论】:

标签: android firebase


【解决方案1】:

当您使用实时数据库时,处理此问题的最佳方法是创建一个child authorized,然后将所有授权的 uid 保存在该子项中,然后设置您的规则如下:`"rules":

 {
    ".read": true,
    ".write": "root.child('authorized').hasChild(auth.uid)"
  }
}`

你可以参考这个project to see sample implementation

【讨论】:

    【解决方案2】:
    1. 如果在用户节点内创建 uid 时使用了 push(),则 authid 和 uid 不一样。它们有不同的值。请确保您使用了相同的 UID

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

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

    【讨论】:

    • 1.是的,uid 和 authid 是一样的。 2.我在 $uid 下无法阅读。如果我在 users 下设置读取和写入,则一切正常。
    猜你喜欢
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多