Android 实时数据库规则问题

Android 实时数据库规则问题,android,firebase-realtime-database,firebase-security,Android,Firebase Realtime Database,Firebase Security,拥有一个具有Coach路径的DB。试图用规则来保证安全。因此,只有当他们的身份验证与用户登录时使用的身份验证匹配时,才允许阅读下面的内容。如果我在规则操场上测试这个,它通过了 { "rules": { "Coaches": { ".indexOn": "coachEmail", "$uid":{

拥有一个具有Coach路径的DB。试图用规则来保证安全。因此,只有当他们的身份验证与用户登录时使用的身份验证匹配时,才允许阅读下面的内容。如果我在规则操场上测试这个,它通过了

 {
      "rules": {
        "Coaches": {
          ".indexOn": "coachEmail",
            "$uid":{
               ".read": "$uid==auth.uid",
            }
但在我的应用程序中,它不起作用。请在logcat中获取错误 侦听/Coach失败:数据库错误:权限被拒绝 问题可能是什么?查询数据库的代码中可能有错误

//Query the database to get the current user
        Query query = databaseReference.orderByChild("coachEmail").equalTo(user.getEmail());
        query.addValueEventListener(new ValueEventListener() {
更新:

 "rules": {
    "Coaches": {
      ".indexOn": "coachEmail",
        "$uid":{
           ".read": "auth.uid == $uid",
                    ".write": "auth.uid == $uid" 
        }
这是在操场上通过的规则

Type    read
Location    /Coaches/R6qhJIyLw9S6tI5llmuBhRvWWhn1
Data    null
Auth    { "provider": "anonymous", "uid": "R6qhJIyLw9S6tI5llmuBhRvWWhn1" }
Admin   false
每当我运行我的应用程序时,都会出现以下错误

Listen at /Coaches failed: DatabaseError: Permission denied
不确定问题可能是什么。它们只是确保您的代码对数据库执行的任何操作都是根据您的规则允许的

您的代码尝试加载
/coach
,因此规则会检查用户是否具有
/coach
的读取权限。因为它们没有,所以读取操作被拒绝

当前规则允许的唯一读取操作是:

databaseReference.child(user.getUid())...

由于您希望允许用户指定自己的电子邮件地址的查询,因此您也应该更新规则以检查此类查询。如上的文档所示,这类似于:

"Coaches": {
  ...
  ".read": "auth.uid != null &&
            query.orderByChild == 'coachEmail' &&
            query.equalTo == auth.token.email"
  ...
}

老实说,我很乐意实现这个“规则”:{“coach”:{“$uid”:{.write”:“$uid===auth.uid”这适用于规则操场,在我的应用程序日志中,它表示权限被拒绝。每个coach都存储在uid下,因此我不知道问题是什么,上面的问题是试图找到解决方法。每当我使用通配符值时,它都是denies权限即使我在$UID下执行了true和true,我的回答的前半部分描述了为什么查询不起作用,以及如何加载用户(基于用户的UID而不进行查询)。第二部分介绍了如何使电子邮件地址查询安全运行。我不确定您在评论中询问了什么,因此不确定如何进一步提供帮助。我非常感谢您的帮助,因为我下周有一个项目要完成,并且正在努力实现此目标。我已经阅读了大量内容并观看了视频,不明白为什么我会这样做t不起作用增益:我的回答的前半部分描述了为什么查询不起作用,以及如何加载用户(基于用户的UID而不是查询)。第二部分描述了如何使对电子邮件地址的查询安全地工作。您是否尝试了我回答的这两部分中的任何一部分?是的,我尝试了第二部分,但日志中仍然显示权限被拒绝