Firebase 规则在设置为 true 时显示权限错误

Posted

技术标签:

【中文标题】Firebase 规则在设置为 true 时显示权限错误【英文标题】:Firebase rules showing permission error when set to 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();
            
        );

【问题讨论】:

你能显示用于读取数据的代码吗? 我已经更新了问题,请重新检查 【参考方案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,安全规则确实允许读取数据。

【讨论】:

以上是关于Firebase 规则在设置为 true 时显示权限错误的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 数据库权限被拒绝,读/写权限设置为 true

如何使用具有读写规则的firebase为false

Firebase 数据库规则关于

在 Firebase-Realtime Database 上使用啥规则让用户注册和登录?

Firebase 数据库 - 为数据库中的用户设置规则

为Firebase身份验证帐户实施密码的自定义规则