дублирующее имя пользователя и пользовательский вход в firebase [duplicate]

На этот вопрос уже есть ответ здесь:

Как вы предотвращаете дублирование пользовательских свойств в Firebase? 2 ответа

Моя текущая система Firebase позволяет мне зарегистрироваться с новым пользователем, используя firebase createuser (), получая электронную почту и пароль. В методе oncomplete я также беру детали, используемые для регистрации, чтобы электронная почта и пароль вместе с некоторыми другими переменными, которые я создаю, такими как username и DOB и сохраните их в базе данных firebase со следующим кодом:

// ...database code above
DatabaseReference users = database.getReference("users"); 
User user = new User(username, password,DOB,email); 
users.push().setValue(user);
Мне нужно проверить сейчас перед сохранением в базе данных, что имя пользователя уникально, если оно не запрашивает другое имя пользователяЯ также внедрил систему, в которой, когда пользователь входит в систему, он проверяет строку, если это электронное письмо или имя пользователя, если пользователь входит в систему с электронной почтой, то он использует систему Firebase для входа в систему, но если они используют имя пользователя, то он должен проверить базу данных firebase, чтобы увидеть, существует ли имя пользователя, а затем проверить, правильный ли пароль

Я понятия не имею, как сделать что-либо из вышеперечисленного, любая помощь очень ценится, спасибо. Я воспользовался поиском в стеке и понял, что есть посты с этим вопросом, которые уже задавались. Я попробовал некоторые из этих решений, которые не работали, потому что структура базы данных anyones различна

 Frank van Puffelen18 июл. 2016 г., 20:55
Увидетьstackoverflow.com/questions/25294478/... и, вероятно, многие другие результаты вэтот список

Ответы на вопрос(1)

Решение Вопроса

Позвольте мне сосредоточиться на первой проблеме на данный момент.Уникальные имена пользователей.

Одним из ключевых аспектов обеспечения большего поиска в Firebase является структурирование данных. То, как вы структурируете, определяет, насколько эффективна ваша функциональность.

Для уникальных имен пользователей я предлагаю что-то подобное в вашей базе данных Firebase.

В приведенной выше структуре базы данных я сделал отдельный узел для имен пользователей, которыене доступно (правда, потому чтонемного Требуется значение). Так что каждый раз, когда мне нужно проверить, мне не придется проходить через другие деталиПОЛЬЗОВАТЕЛИ узел.

В вашем приложении вы можете использовать его для хранения имени пользователя.

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
}
}

Надеюсь, это прояснит, насколько эффективно можно проверить уникальное имя пользователя.

И используя этот механизм, вы можете поставить свою логику и для второго вопроса.

 Tanishq Sharma19 июл. 2016 г., 03:35
Это огромная благодарность от @Frank :)
 TerribleCoder18 июл. 2016 г., 20:04
Хорошо, спасибо, я попробую внедрить это в мой код и выяснить 2) с предоставленной информацией
 Tanishq Sharma18 июл. 2016 г., 19:59
На самом деле это самый простой способ сделать это. Потому что здесь вы избегаете извлечения других пользовательских данных только для того, чтобы получить имя пользователя. Для лучшего понимания проверьте это:Firebase: как структурировать лучшие данные?
 TerribleCoder18 июл. 2016 г., 19:56
Я еще не прочитал весь ваш ответ, как вы описали для создания уникальных имен - у меня была та же идея, но я подумал, что это плохо, потому что это похоже на избыточные данные, если бы у нас было тысячи пользователей, это могло бы занять много места , или это самый простой способ сделать это?
 Frank van Puffelen18 июл. 2016 г., 20:55
Отличный ответ @TanishqSharma
 Tanishq Sharma18 июл. 2016 г., 20:06
Конечно, дайте мне знать об этом.

Ваш ответ на вопрос