【问题标题】:Firebase rules showing permission error when set to trueFirebase 规则在设置为 true 时显示权限错误
【发布时间】:2021-01-19 09:21:05
【问题描述】:

我有一个简单的数据库结构,我想向其中添加 firebase 安全规则,但即使我在节点结构下将 .read 和 .write 的值设置为 true,这些规则也会阻止所有权限,这里是示例规则

{
  "rules": {
    "Lines": {
      ".read": true,
        ".write": false
    },
      "Links": {
      ".read": true,
        ".write": false
    }
  }
}

这是我的数据库结构示例

{
  "Lines" : {
    "Line 1" : "Lines 1238443",
    "Line 2" : "Lines 4657673"
  },
  "Links" : {
    "Links 1" : "Link 3282873",
    "Links 2" : "Link 3493934"
  }
}

我试图只允许读取操作,但我的应用程序一直说权限被拒绝我已经检查了它看起来直截了当的文档,但我无法确定到底发生了什么,因为即使我尝试过

{
  "rules": {
    "Lines": {
      ".read": true,
        ".write": true
    },
      "Links": {
      ".read": true,
        ".write": true
    }
  }
}

我仍然收到权限被拒绝错误 这是从数据库中读取的代码

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
        databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                String lin = snapshot.child("Links").child("Links 1").getValue(String.class);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
                
                Toast.makeText(getApplicationContext(), "Error "+error.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });

【问题讨论】:

  • 你能显示用于读取数据的代码吗?
  • 我已经更新了问题,请重新检查

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


【解决方案1】:

您正在尝试从数据库的根目录读取。而且由于您的规则没有授予任何人对数据库根目录的读取权限,因此读取被拒绝。

如果您只想从数据库中读取 Links 子项,则应在附加侦听器之前指定该子项名称,因此:

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();

databaseReference.child("Links").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        String lin = snapshot.child("Links 1").getValue(String.class);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {        
        Toast.makeText(getApplicationContext(), "Error "+error.getMessage(), Toast.LENGTH_SHORT).show();
    }
})

现在我们将一个侦听器附加到/Links,安全规则确实允许读取数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 2020-09-26
    • 2021-08-26
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多