当auth.id == $ uid无效时从Firebase数据库获取数据

时间:2018-02-10 16:41:30

标签: android database firebase

我正在尝试从Android应用中的Firebase数据库获取数据,以便只显示当前经过身份验证的用户创建的数据,并使用以下代码。

{
  "rules": {
      "events": {
         "$userId": {
            ".read": "auth.uid == $userId",
            ".write": "auth.uid == $userId",
         }
      }
   }
}

数据库如下所示:

root
    events
        event1
            city
            date
            userID
        event2
            city
            date
            userID

没有用户“表”。但是,用户通过Firebase用户界面登录,因此,FirebaseAuth会使用uid创建帐户。

我正在尝试从以下行获取数据:

databaseReference = firebaseDatabase.getReference().child("events");
databaseReference.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                Event event = new Event();
                event = dataSnapshot.getValue(Event.class);
                eventList.add(event);
                eventListRecyclerView.setAdapter(EventAdapter);
            }

相应的时候我没有得到任何数据。

帮助将不胜感激。

由于

2 个答案:

答案 0 :(得分:0)

你错误的孩子是因为 root是规则而且孩子是事件 如果没有父母,你就不会直接打电话给孩子

我认为以下代码可以解决您的问题

databaseReference = firebaseDatabase.getReference().child.("rules").child("events");

答案 1 :(得分:0)

我自己找到了解决方案。 我的数据库结构不正确。它应该是

root
    <uid>
        events
           ...

数据库参考代码应为

mContactsDatabaseReference = mFirebaseDatabase.getReference().child("events").child(new FirebaseAuth.getCurrentUser().getUid());