React Native (expo) и Firebase Firestore - проблема, когда пользователь создается в приложении (Undefined не является объектом ... оценка ...) - PullRequest
0 голосов
/ 16 июня 2020

У меня проблемы с firebase и expo. Когда мы выполняем процесс регистрации и пользователь создается с помощью firebase, мы иногда получаем «undefined не является объектом (оценка 0.docs [0] .data)», и пользователь перенаправляется на точку входа приложения вместо переход к следующему экрану.

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

Здесь ниже функция, которая не работает должным образом

const createUser = async () => {
    //Check if user already exists
    await props.firebase.db
      .collection('users')
      .where('email', '==', props.userProfile.email)
      .get()
      .then(async (snapShot) => {
        //if no document is found, save user to db
        if (snapShot.docs.length === 0) {
          await saveUserToDataBase()
            .then(() => {
              setShowLoader(false);
              props.navigation.navigate('NotificationPermission');
            })
            .catch((err) => Alert.alert('An error occurred', err.message));
        }
        //else log an error, TODO: add error text in app.
        else {
          setShowLoader(false);
        }
      })
      .catch((err) => {
        Alert.alert('An error occurred', err.message);
      });
  };


 const saveUserToDataBase = async () => {
    //finds the correct collection and creates a new document within in containing the profile data.
    await props.firebase.db
      .collection('users')
      .add({
        first_name: props.userProfile.firstName,
        email: props.userProfile.email.toLowerCase(),
        phone_number: props.userProfile.phoneNumber,
        organization: props.userProfile.organization,
        profileId: props.userProfile.profileId,
      })
      .then(async (docRef) => {
        await props.firebase.db
          .collection('profile')
          .doc(props.userProfile.profileId)
          .update({
            user_id: docRef.id,
          })
          .then(async () => {
            await uploadProfilePhoto(docRef.id);
            if (props.accessToken) {
              props.navigation.navigate('NotificationPermission');
            } else {
              props.navigation.navigate('NotificationPermission');
            }
          })
          .catch((err) => {
            Alert.alert(
              'An error occurred updating the users profile ',
              err.message,
            );
          });
      })
      .catch((err) => {
        Alert.alert('An error occurred creating the user', err.message);
      });
  };

Я использовал компонент Alert, чтобы проверить ошибку напрямую, ошибка согласуется с несколькими адресами электронной почты. Я обновил пакет firebase, ничего не делал. Я чувствую, что onAuthStateChanged может быть ответственным за это, но я не уверен, как с этим справиться? Будем очень признательны за вашу помощь или предложения.

...