【问题标题】:firebase realtime database rule for authentication user身份验证用户的firebase实时数据库规则
【发布时间】:2019-07-10 22:54:05
【问题描述】:

如果我希望只有身份验证用户可以将数据写入 firebase,然后身份验证用户可以从其他身份验证用户读取数据,我应该使用什么规则。例如用户A向数据库写入数据,我希望用户B也可以从用户A读取数据。

例如 JSON:

{
  "User Information" : {
    "47NiYA7rGNa8nJvlnnxzpxhqvCl2" : {
      "-LYuXT8d5Hzm4Sp_7buK" : {
        "deceasedName" : "You",
        "deceasedRelative" : "Are",
        "noLot" : "34",
        "relativeAddress" : "Main Road",
        "relativeContact" : "0231456789"
      }
    },
    "LV4y2BXnNWWkJix6YwTRJV8LdQs2" : {
      "-LYufF_KMO1o7EULIK8Y" : {
        "deceasedName" : "amir",
        "deceasedRelative" : "loqman",
        "noLot" : "104",
        "relativeAddress" : "aman",
        "relativeContact" : "123456"
      }
    }
  }
}

对于“用户信息”表,有 2 个身份验证用户,即 Uid = "47NiYA7rGNa8nJvlnnxzpxhqvCl2" 和 Uid = "LV4y2BXnNWWkJix6YwTRJV8LdQs2"。所以我希望每个用户都可以检索“用户信息”表中的所有数据。

此代码只允许用户检索自己的数据:

 databaseReference = FirebaseDatabase.getInstance().getReference("User Information");
    FirebaseUser user = firebaseAuth.getCurrentUser();
    String UserID = user.getUid();
    databaseReference.child(UserID).addListenerForSingleValueEvent(new ValueEventListener() { {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot INFOSnapshot : dataSnapshot.getChildren()){
                UserInformation  userInfo = INFOSnapshot.getValue(UserInformation.class);
                infoList.add(userInfo);
            }
            UserInfoAdapter userInfoAdapter = new UserInfoAdapter(InfoDisplayActivity.this, infoList);
            listViewINFO.setAdapter(userInfoAdapter);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

我使用这个 firebase 规则:

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

那么我需要更改 firebase 规则或更改编码吗?

【问题讨论】:

  • 您还在问题中包含了 JSON 树的图片。请将其替换为实际的 JSON 作为文本,您可以通过单击 your Firebase Database console 的溢出菜单 (⠇) 中的 Export JSON 链接轻松获得。将 JSON 作为文本使其可搜索,让我们可以轻松地使用它来测试您的实际数据并在我们的答案中使用它,一般来说这只是一件好事。

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


【解决方案1】:

对于写作部分,我建议您将规则更改为:

{
  "rules": {
    ".write": "auth != null",
    "User Information": {
      "$user_id": {
        ".write": "$user_id === auth.uid"
      }
    }
  }
}

使用此写入规则,每个用户只能写入自己的用户信息,但仍然可以读取数据库中的所有内容。有关用户安全的更多信息,我建议您阅读the Firebase documentation

至于阅读所有用户信息,您只需删除代码中的.child(UserID) 部分,如下所示:

databaseReference.addListenerForSingleValueEvent(new ValueEventListener() { {

【讨论】:

    猜你喜欢
    • 2021-01-22
    • 2020-09-24
    • 2018-01-17
    • 2020-05-10
    • 2018-08-25
    • 2021-10-11
    • 2020-04-29
    • 2020-06-23
    • 2017-12-26
    相关资源
    最近更新 更多