Firebase安全规则权限被拒绝

时间:2016-06-13 11:07:51

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

我的firebase数据库是这样的: -

enter image description here

这些是我编写的安全规则但是当我在模拟器中使用它们时它们验证就好了,但是当在代码中使用时,给予权限拒绝错误

Firebase ref = new Firebase("https://xxxxxxxxx.firebaseio.com/userslikelist/" + mAuth.getCurrentUser().getUid());
    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                if(!likedMap.containsKey(postSnapshot.getKey())){
                    likedMap.put(postSnapshot.getKey(), postSnapshot.getValue(String.class));
                }
            }
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });

}

我收到错误: -

/ userslikelist / qzCqJph6XcZbiIpbDKTTxwjRHrh1 / -KK850oXwPnOvxan1xNG失败:FirebaseError:权限被拒绝

/ jokes / textjokes / MISC-0-01 / likeCount失败:FirebaseError:权限被拒绝

我的代码: -

{
    "rules": {
        "jokes": {
            "textjokes": {
                ".read": true,
                ".write": "auth != null"
            }
        },
        "users": {
            "$uid": {
                ".write": "$uid == auth.uid"
            }
        },
        "userslikelist": {
            "$uid": {
                ".read": "$uid == auth.uid",
                ".write": "$uid == auth.uid"
            }
        }
    }
}

我不明白。我做错了什么?

更新的代码: -

{{1}}

2 个答案:

答案 0 :(得分:1)

您未授予/userslikelist/userId读取权限,因此您无法在dataSnapshot上获得onDataChange

确保在/userslikelist/userId级别设置读取权限。

{
  "rules": {
    "jokes" : {
      "textjokes" : {
        ".read" : true,
        ".write": "auth != null"
      }
    },
    "users": {
      "$uid": {
        ".write": "$uid == auth.uid"
      }
    },
    "userslikelist": {
      "$uid": {
        ".read": "$uid == auth.uid", //do whatever logic you need here
        ".write": "$uid == auth.uid"
      }
    } 
  }
}

答案 1 :(得分:1)

对于遇到此问题的其他人。这里的问题是我使用传统的firebase api方法来设置值并从数据库中读取。我更改了更新方法以使用此示例中使用的新google firebase系统,现在我可以更新数据库。

https://github.com/firebase/quickstart-android/blob/master/database/app/src/main/java/com/google/firebase/quickstart/database/NewPostActivity.java#L39-L39