【发布时间】:2019-12-31 16:18:23
【问题描述】:
我正在使用 firebase 创建一个 android 应用程序。我的数据库结构是这样的,
user:{
$uid:{
uname: abc,
age: 20,
email: abc@gmail.com,
premium: true,
score: 80
}
}
安全规则是这样的,
{
"rules": {
"user":{
"$uid":{
"score":{
".read":"auth.uid===$uid",
".write":"auth.uid===$uid"
},
"$others":{
".read":"auth!=null",
".write":"auth!=null"
}
}
}
}
}
这是我从 firebase 读取数据的代码,
DatabaseReference myRef = FirebaseDatabase.getInstance().getReference()
.child("user").child(uid);
myRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
users = dataSnapshot.getValue(User.class);
//set values to associated textviews
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
问题是“.read”规则仅在模拟器中,尽管“.write”规则在应用程序和模拟器中都有效。当我将规则更改为此时,
{
"rules": {
"user":{
"$uid":{
".read":"auth!=null",
".write":"auth!=null",
"score":{
".read":"auth.uid===$uid",
".write":"auth.uid===$uid"
},
"$others":{
".read":"auth!=null",
".write":"auth!=null"
}
}
}
}
}
它可以读写。但这并不安全。为什么即使 auth.uid = myUid 也无法读取数据?但是“.write”规则总是很好。
【问题讨论】:
标签: android firebase-realtime-database firebase-security