如何在android上列出来自firebase的用户信息?

时间:2017-08-10 14:00:32

标签: android firebase firebase-realtime-database

我正在开发一个Android项目。我的firebase中有一个用户节点,我想列出一些信息,但我不想被读取。我采取了措施,但我没有阅读姓名或姓名等信息。我该怎么做? 我的数据库规则;

"rules": {
    "users": {
           "$uid": {
               ".read": "$uid === auth.uid",
                  ".write": "$uid!=null && $uid === auth.uid",
            "name-surname": {
              ".read": true,
                ".validate": "newData.isString() && newData.val().length < 30"
            },
            "status": {
              ".read": true,
                ".validate": "newData.isString()&& newData.val().length < 75"
            },
          "website": {
            ".read": true,
                ".validate": "newData.isString()&& newData.val().length < 80"
            },
          "linkedin": {
            ".read": true,
                ".validate": "newData.isString()&& newData.val().length < 80"
            },
          "github": {
            ".read": true,
                ".validate": "newData.isString()&& newData.val().length < 80"
            }
           }
    }
}

我的代码部分;

 DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
   final MembersInfo member = new MembersInfo();
    mDatabase.child("users").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // Is better to use a List, because you don't know the size
            // of the iterator returned by dataSnapshot.getChildren() to
            // initialize the array

                    String nameSurname = dataSnapshot.child("uid").child("name-surname").getValue(String.class);
            Toast.makeText(MainActivity.this, nameSurname, Toast.LENGTH_SHORT).show();
                    member.NameSurname=nameSurname;

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Toast.makeText(MainActivity.this, databaseError.toString(), Toast.LENGTH_SHORT).show();
        }
    });

1 个答案:

答案 0 :(得分:1)

了解用户的UID 存在安全风险。请在此处查看我的说明:Firebase - Is auth.uid a shared secret?

也就是说,有充分的理由只在您的应用中公开用户配置文件的子集。为此,您必须将子集分成单独的顶级列表。例如,要仅允许用户名列表而不共享其他信息:

usernames
  "209103": "Frank van Puffelen"
  "7174606": "oguzkaganeren"

为了能够阅读此列表,您需要在/usernames上授予访问权限。所以这仍然会分享UID。

有关更多示例,请参阅: