代码之家  ›  专栏  ›  技术社区  ›  TheLogicGuy

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

  •  0
  • TheLogicGuy  · 技术社区  · 7 年前

    当我的Firebase DB中有以下规则时:

      {
      "rules": {
        ".read": "auth != null",
        ".write": "auth != null"
      }
    }
    

    这意味着只有已登录的用户才能读写my DB。 假设用户经过身份验证,并且我有以下变量:

    mFirebaseAuth = FirebaseAuth.getInstance();
    mFirebaseUser = mFirebaseAuth.getCurrentUser();
    

    还有那个 mFirebaseUser != null

    我的问题是,对于已登录的用户,读取这些数据的正确方法是什么?
    当我以这种方式读取数据时,它是否会以某种方式将 mFirebaseUser!=无效的

    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 回复  |  直到 7 年前
        1
  •  1
  •   Frank van Puffelen    7 年前

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

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

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

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