【问题标题】:Access data in Firebase from android only if user authenticated仅当用户经过身份验证时才从 Android 访问 Firebase 中的数据
【发布时间】:2016-12-24 12:34:29
【问题描述】:

我的 firebase 数据如下所示。我想访问salon->1的数据我可以访问-

    databaseReference = mDatabase.child("salon").child("1").child("franchises");
    databaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

但在这种情况下,数据不安全,因为主体可以准备写入数据,所以我尝试添加这样的规则 -

{
 "rules": {
   "users": {
    "$uid": {
      ".write": "$uid === auth.uid",
      ".read": "$uid === auth.uid"
    }
   }
  }
}

但现在当我尝试访问数据时,我在 android 中得到了permission denied。我做错了什么?

【问题讨论】:

    标签: android firebase firebase-realtime-database firebase-authentication firebase-security


    【解决方案1】:

    未指定任何内容时的默认行为是不允许用户读取数据。您没有对 salon 设置任何权限,因此 Firebase 拒绝读取。

    要授予读取权限,您还必须指定谁可以读取salon 节点下的数据。例如,允许用户读取所有沙龙数据:

    {
      "rules": {
        "salon": {
           ".read": "auth != null"
         }
       },
        "users": {
          "$uid": {
            ".write": "$uid === auth.uid",
            ".read": "$uid === auth.uid"
          }
        }
      }
    }
    

    【讨论】:

    • 好的,如果我需要通过身份验证后获得的 uid 来调用特许经营权呢?
    • 像这样-databaseReference = mDatabase.child("salon").child("1").child("franchises/"+uid);
    • 啊...沙龙是每个用户的?那还不清楚。我已经更新了我的答案。请注意,在数据库中以纯文本形式存储密码是一种非常不好的做法,因此我希望这些值是salted hashes
    • 不,这个概念是一个沙龙有多个特许经营权。用户应该能够看到所有沙龙特许经营权并预订一个位置。我是firebase的新手,我不确定应该如何设计结构。我愿意接受你的建议。在我的移动应用程序中,我使用的是 firebase 身份验证,我只想向所有这些用户授予访问权限,这些用户是经过身份验证的用户。这是我的主要目标。
    • 在这种情况下,我以前的规则就是你所需要的。我恢复了编辑。
    猜你喜欢
    • 2022-01-25
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 2017-01-17
    相关资源
    最近更新 更多