【问题标题】:Firebase Query-based Security Rules not working on SimulatorFirebase 基于查询的安全规则不适用于模拟器
【发布时间】:2018-06-26 11:50:34
【问题描述】:

我正在尝试在 firebase 实时数据库 -> 规则 -> 模拟器上测试简单代码,但它无法读取。只是我正在尝试来自docs的这个简单代码

"JetonAlanlar" : {      
              ".write": "auth != null && !root.child('Banned').hasChild(auth.uid)",                 
              "Sorular":{
                "Tarih":{

                  ".read": "query.orderByKey && query.limitToFirst <=30"

                },
              }
          },

这是模拟器运行代码:

/JetonAlanlar/Sorular/Tarih

模拟器说读取权限被拒绝。这个问题是模拟器还是 Firebase 实时数据库不支持基于查询的规则。

已编辑:

这是我在安卓应用中查询的代码

public class SorularFragmentYeni extends SoruAdaptor {


    public SorularFragmentYeni() {}

    @Override
    public Query getQuery(DatabaseReference databaseReference) {

    ... 

        return databaseReference.child("JetonAlanlar/Sorular").child("Tarih");
    }
}

还有

public abstract class SoruAdaptor extends Fragment implements RewardedVideoAdListener {

...

public abstract Query getQuery(DatabaseReference databaseReference);

}

【问题讨论】:

  • 据我所知,您无法在模拟器中测试基于查询的规则。您必须在实际代码中对其进行测试。
  • 不幸的是真机也给 Permission denied
  • 在这种情况下,我建议您使用数据结构和用于查询数据库的代码更新您的问题,我会看看是否可以帮助您:)
  • 我已经编辑了我的问题
  • 是所有相关代码吗?我所看到的只是获取数据库参考。

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


【解决方案1】:

正如 André 所说:Firebase 数据库的规则模拟器不允许您模拟查询。它只是模拟从某个位置读取或写入到某个位置。这解释了为什么您的阅读不起作用:您的规则只允许查询,而模拟器不使用查询。

您的代码也没有返回查询:

databaseReference.child("JetonAlanlar/Sorular").child("Tarih")

此代码只是从您的安全规则不允许的位置读取。如果你想允许这个读操作,你的规则应该是:

"JetonAlanlar" : {      
  "Sorular":{
    "Tarih":{
      ".read": true
    }
  }
}

如果您想保留当前规则,则需要确保您的代码与查询允许的内容相匹配:

public Query getQuery(DatabaseReference databaseReference) {

    ... 

    return databaseReference.child("JetonAlanlar/Sorular").child("Tarih")
                            .orderByKey().limitToFirst(30);
}

认为安全规则会为您添加最后两个子句是一个常见的错误。但 Firebase 的安全规则并非如此:Firebase 只是根据规则检查您的查询是否被允许。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多