Firebase.default.auth (). CurrentUser.uid является нулевым после createUserWithEmailAndPassword () - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь создать новый документ в своей коллекции «users» в Firebase для любого нового пользователя, созданного на экране «Регистрация» для моего приложения React-Native, и этот документ должен включать в себя uid нового пользователя, имя , фамилия, номер телефона и дата рождения. Проблема заключается в том, что после того, как я использую createUserWithEmailAndPassword для создания пользователя, когда я пытаюсь получить uid с помощью currentUser.uid, я получаю следующую ошибку: null не является объектом (вычисляя _Firebase.default.auth (). CurrentUser.uid. ').

Я экспериментировал со способами получения "uid" нового пользователя в операторе .then, следующем за createUserWithEmailAndPassword, а также с созданием нового документа в операторе .then, но мне не повезло с этим еще. Как мне изменить свой код, чтобы я мог успешно создавать новый документ "users" после успешного создания пользователя?

Ниже приведен мой код из функции handleSignUp, которая вызывается при моем "Sign Up" нажата кнопка:

handleSignUp = () => {
    Firebase.auth()
      .createUserWithEmailAndPassword(this.state.email, this.state.password)
      .then(() => this.props.navigation.navigate("Main"))
      .catch((error) => this.setState({ errorMessage: error.message }));

    if (Firebase.auth().currentUser.uid) {
      const user = {
        uid: Firebase.auth().currentUser.uid,
        firstName: this.state.firstName,
        lastName: this.state.lastName,
        phone: this.state.phone,
        email: this.state.email,
        dob: this.state.dob
      };
      db.collection("users").doc(response.user.uid).set(user);
    }
  }; 

1 Ответ

1 голос
/ 15 апреля 2020

Если вы хотите:

  1. Создать пользователя
  2. Записать его данные в базу данных
  3. Перейти на новую страницу

Вы должны будете убедиться, что выполняете эти шаги в указанном порядке, и использовать обещания, возвращаемые каждым шагом, чтобы убедиться, что все происходит в нужное время:

Firebase.auth()
  .createUserWithEmailAndPassword(this.state.email, this.state.password)
  .then((credentials) => {
      const user = {
        uid: credentials.user.uid,
        firstName: this.state.firstName,
        lastName: this.state.lastName,
        phone: this.state.phone,
        email: this.state.email,
        dob: this.state.dob
      };
      return db.collection("users").doc(response.user.uid).set(user);
  }).then(() => {
      this.props.navigation.navigate("Main")
  }).catch((error) => this.setState({ errorMessage: error.message }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...