首页 文章

检查firebase实时数据库中是否已存在用户

提问于
浏览
1

我得到Alex Mamo's Solution以检查我的数据库中是否存在唯一值,但快照始终为null . 解决方案在这里:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userNameRef = rootRef.child("Users").child("Nick123");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    if(!dataSnapshot.exists()) {
        //create new user
    }
}

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
userNameRef.addListenerForSingleValueEvent(eventListener);

我的数据库看起来像这样:

users
    (auto-generated push token ID)
        fullname
        username
        gender
        ...

我不知道它是否是正确的方法,但我使用push()方法将用户对象添加到数据库,并且此方法生成如上所述的推送令牌ID .

因此,为了不创建重复的用户,我应该用上述解决方案更改什么?有没有更好的方法来做到这一点?也许喜欢用firebase auth方法检查firebase uid?

UPDATE 我的数据库截图:
database
如您所见,'users'下方的字符串与用户的uid不同 .

2 回答

  • 2

    在将用户详细信息保存到数据库中时,这不是最佳做法 . 首先,您应该实现Firebase Authentication然后为了检查数据库中是否存在用户,您应该使用以下代码行:

    String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference uidRef = rootRef.child("users").child(uid);
    ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if(!dataSnapshot.exists()) {
            //create new user
        }
    }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {}
    };
    uidRef.addListenerForSingleValueEvent(eventListener);
    

    因此,解决此问题的关键是调用 child() 方法并将 uid 作为参数传递,而不是调用生成随机唯一标识符的 push() 方法 .

  • 3

    如果你有这个数据库:

    users
    (auto-generated push token ID)
        fullname
        username
        gender
    

    然后检查用户是否存在,您需要执行以下操作:

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference userNameRef = rootRef.child("users");
    Query queries=userNameRef.orderByChild("fullname").equalTo("Nick123");
    ValueEventListener eventListener = new ValueEventListener() {
      @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
       if(!dataSnapshot.exists()) {
           //create new user
        }
     }
    
        @Override
       public void onCancelled(DatabaseError databaseError) {}
    };
    queries.addListenerForSingleValueEvent(eventListener);
    

    首先,如果您有 users 小写字母,那么在子项内添加 users ,那么您需要使用查询来检查全名是否等于Nick123 .


    通常数据库的结构如下:

    users
      userId
         fullname: Nick123
    

    属性是 key:value ,键是标识符,Nick123是值,所以在 child() 方法中你需要写入 fullname 而不是Nick123的标识符 .

    然后,由于您可以获取userId,您可以这样做:

    FirebaseUser currentFirebaseUser =FirebaseAuth.getInstance().getCurrentUser();
    String userId=currentFirebaseUser.getUid();
     DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference userNameRef = rootRef.child("users").child(uid).child("fullname");
    userNameRef.addValueEventListener(new ValueEventListener(){...}
    

相关问题