首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >身份验证用户的firebase实时数据库规则

身份验证用户的firebase实时数据库规则
EN

Stack Overflow用户
提问于 2019-02-17 18:32:36
回答 1查看 3.5K关注 0票数 0

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

例如JSON:

代码语言:javascript
运行
复制
{
  "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"
      }
    }
  }
}

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

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

代码语言:javascript
运行
复制
 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规则:

代码语言:javascript
运行
复制
{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

那么,我是否需要更改firebase规则或更改编码?

EN

回答 1

Stack Overflow用户

发布于 2019-02-18 05:01:35

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

代码语言:javascript
运行
复制
{
  "rules": {
    ".write": "auth != null",
    "User Information": {
      "$user_id": {
        ".write": "$user_id === auth.uid"
      }
    }
  }
}

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

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

代码语言:javascript
运行
复制
databaseReference.addListenerForSingleValueEvent(new ValueEventListener() { {
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54732321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档