当我在Firebase数据库中有以下规则时:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
这意味着只有已登录的用户才能读写我的数据库。 假设用户已通过身份验证,我有以下变量:
mFirebaseAuth = FirebaseAuth.getInstance();
mFirebaseUser = mFirebaseAuth.getCurrentUser();
和mFirebaseUser != null
我的问题是为签名用户阅读此数据的正确方法是什么?
当我以这种方式读取数据时,它是否以某种方式将数据库发送到数据库mFirebaseUser != null
?
mDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot d: dataSnapshot.getChildren()){
SomeDataObj cur = d.getValue(SomeDataObj.class);
// Do work with SomeDataObj
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
答案 0 :(得分:1)
如果通过SDK访问数据库的用户已登录,则会自动填充安全规则中的auth
变量。
因此,您当前的规则允许用户在登录时读取和写入所有数据。
如果用户未登录并尝试读取/写入数据,则数据库将拒绝该操作。您需要实现onCancelled(...)
回调来处理这种情况(并确保它不会被隐藏):
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}