0

我現在的火力系統,可以讓我用火力CREATEUSER()以電子郵件和密碼,在的onComplete方法我還需要用於註冊這樣的電子郵件的細節與新用戶立即登記並與我創造,如用戶名和出生日期,並將它們保存到火力分貝以下代碼其它一些變量一起密碼:火力重複的用戶名和自定義登錄

// ...database code above 
DatabaseReference users = database.getReference("users"); 
User user = new User(username, password,DOB,email); 
users.push().setValue(user); 
  1. 我需要保存到該用戶名是唯一的數據庫之前,現在檢查如果它不是它要求另一個用戶名
  2. 我也實現了一個系統,當用戶l ogs in,它會檢查字符串是否爲電子郵件或用戶名,如果用戶使用電子郵件登錄,那麼它將使用Firebase的系統登錄,但如果他們使用用戶名,則必須檢查Firebase數據庫以查看是否用戶名存在,然後檢查密碼是否正確

我不知道如何做到上述任何幫助,非常感謝。我用計算器搜索,實現有這個問題的帖子已經被問,我已經嘗試了一些這些解決方案沒有奏效,因爲每個人的數據庫結構是不同的

+0

見http://stackoverflow.com/questions/25294478/how-do-you-prevent-duplicate-user-properties-in-firebase和可能很多其他的結果[此列表(HTTP://計算器。 com/search?q =%5Bfirebase-authentication%5D + unique + username) –

回答

2

讓我專注於第一個問題截至目前。 唯一用戶名。

之一具有在火力地堡更大檢索的關鍵方面是結構化的數據。你的結構如何決定你的應用程序的功能有多高效。

對於唯一的用戶名,我在您的Firebase數據庫中提供了類似這樣的建議。

enter image description here

在上述數據庫結構,我已經作出了單獨的節點爲可用(真因爲需要某種值)的用戶名。因此,每次我必須檢查時,我都不需要通過節點的其他詳細信息。

在你的應用程序中,你可以用這種方式來存儲用戶名。

FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference takenNames = database.getReference("TakenUserNames"); 

. 
. 
. 
//On Successful Registeration 
. 
takenNames.child(username).setValue(true); 

而且註冊時,您可以檢索像這樣的值:

public boolean doesNameExist(final String sUsername) 
    { 
theTakenNameRef = database.getReference("TakenUserName"); 
     theTakenNameRef.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       if(dataSnapshot.hasChild(sUsername)) 
       { 
        isTaken = true; 
       } 
       else if (!dataSnapshot.hasChild(sUsername)) 
       { 
        isTaken = false; 
       } 

      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 
       Toast.makeText(mContext, "Connection Error. Please try again in some time.", Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     return isTaken; 
    } 
. 
. 
. 
. 
. 
. 
//Calling it in method 
String username = editText.getText().toString().trim().toUpperCase(); 
boolean exists = doesNameExist(username); 
if(exists) 
{ 
//Show Error 
} 
else 
{ 
//Continue Registration 
} 
} 

希望這將清除如何有效唯一的用戶名進行檢查。

並且使用這種機制,你也可以把你的邏輯放在第二個問題上。

+0

我還沒有讀完你的整個答案,你描述的方式做獨特的名字 - 我有同樣的想法,但認爲這是不好的,因爲它的感覺像冗餘數據,如果我們有成千上萬的用戶,這可能會佔用大量的空間。或者這是最簡單的方法嗎? – TerribleCoder

+0

這實際上是最簡單的方法。因爲在這裏您只是爲了獲取用戶名而避免檢索其他用戶數據。爲了更好地理解,請查看:[Firebase:如何構建更好的數據?](https://firebase.google.com/docs/database/android/structure-data) –

+0

好的,謝謝,我會試着實現它我的代碼,並找出2)與提供的信息也 – TerribleCoder

相關問題