用auth读/写Firebase数据库 - auth是否自动传递?

时间:2018-01-19 14:34:50

标签: android firebase-realtime-database firebase-authentication firebase-security

当我在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) {

            }
        });

1 个答案:

答案 0 :(得分:1)

如果通过SDK访问数据库的用户已登录,则会自动填充安全规则中的auth变量。

因此,您当前的规则允许用户在登录时读取和写入所有数据。

如果用户未登录并尝试读取/写入数据,则数据库将拒绝该操作。您需要实现onCancelled(...)回调来处理这种情况(并确保它不会被隐藏):

@Override
public void onCancelled(DatabaseError databaseError) {
    throw databaseError.toException();
}