簡體   English   中英

檢查用戶是否已存在於 firebase 實時數據庫中

[英]Checking if a user already exists at firebase realtime database

我得到了Alex Mamo 的解決方案,以檢查我的數據庫中是否存在唯一值,但快照始終為空。 解決方案在這里:

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?

更新我的數據庫截圖: 數據庫 如您所見,'users' 正下方的字符串與用戶的 uid 不同。

如果你有這個數據庫:

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小寫字母,然后在 child 中添加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(){...}

在將用戶詳細信息保存到數據庫中時,這不是最佳做法。 首先,您應該實現Firebase 身份驗證,然后為了檢查用戶是否存在於您的數據庫中,您應該使用以下代碼行:

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()方法生成隨機唯一標識符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM