我正在开发一个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();
}
});
答案 0 :(得分:1)
了解用户的UID 不存在安全风险。请在此处查看我的说明:Firebase - Is auth.uid a shared secret?
也就是说,有充分的理由只在您的应用中公开用户配置文件的子集。为此,您必须将子集分成单独的顶级列表。例如,要仅允许用户名列表而不共享其他信息:
usernames
"209103": "Frank van Puffelen"
"7174606": "oguzkaganeren"
为了能够阅读此列表,您需要在/usernames
上授予访问权限。所以这仍然会分享UID。
有关更多示例,请参阅: