Проверьте, существует ли пользователь в Firestore

Я хотел бы создать базу данных пользователей в Cloud Firestore с адресом электронной почты в качестве уникального идентификатора для каждого пользователя. Пользователи должны быть в collection, а каждый пользователь - в document.

Вот как я проверяю, существует ли пользователь в действии входа в систему:

FirebaseFirestore db = FirebaseFirestore.getInstance();
                            final DocumentReference userRef = db.collection("users").document(email);
                            userRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                                @Override
                                public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                                    if (task.isSuccessful()) {
                                        DocumentSnapshot document = task.getResult();

                                        Toast.makeText(LoginActivity.this, task.getResult().toString(),
                                                Toast.LENGTH_SHORT).show();

                                        if (document != null) {
                                            //The user exists...
                                        }


                                        else {
                                            //The user doesn't exist...
                                           }

                                        }
                                    }
                                    else
                                        connectionErrorActivity();

                                }
                            });

База данных пуста, как видите:

введите здесь описание изображения

Моя проблема в том, что document никогда не бывает нулевым, даже если база данных пуста. toast показывает, что строковое значение document равно: COM.GOOGLE.FIREBASE.FIRESTORE.DOCUMENTSNAPSHOT@8ED6B96.

Это правильный способ сделать это? Что я могу сделать, чтобы это исправить?


person Tal Barda    schedule 04.10.2017    source источник


Ответы (2)


Результатом этого Task является DocumentSnapshot. Информация о том, существует ли базовый документ на самом деле, доступна через exists.

Если документ существует, вы можете вызвать getData, чтобы получить его содержимое.

person Gil Gilbert    schedule 04.10.2017

Результат задачи имеет поле с именем AdditionalUserInfo, вы можете найти здесь isNewUser. он вернет false, если пользователь уже существует.

  if (task.result?.additionalUserInfo!!.isNewUser){
         addNewUser()
    } else {
         updateUser()
  }
person Salman_Zach    schedule 29.01.2019