Добавляйте дополнительные данные пользователей в firestore при первом входе в систему через firebase firestore. - PullRequest
0 голосов
/ 29 мая 2020
unsubscribeFromAuth = null; //memory leak

  componentDidMount() {
    this.unsubscribeFromAuth = auth.onAuthStateChanged(user => {
      this.setState({ currentUser: user });
      if (user === null)
        return;

      // user data
      const uid = user.uid;
      const photoURL = user.photoURL;
      const name = user.displayName;      

      const userRef = firestore.collection('Users');
      userRef.where('uid','==',uid).get().then((querySnapshot) => {
        console.log("uid size : ",querySnapshot.size);
        // add user extra data when first sign in.
        if (querySnapshot.size === 0) {
          firestore.collection('Users').add({
            uid: uid,
            photoURL: photoURL,
            name: name,
          })
          .then((docRef) => {
            console.log("Document written with ID: ", docRef.id);
          })
          .catch((error) => {
            console.error("Error adding document: ", error);
          });
        }
      });
    });
  }

Мой код такой. Но когда я вхожу в систему, querySnapshot.size равен 0 , и он добавляет данные пользователя снова и снова , даже если уже есть пользовательские данные .

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

Как и у них, у них одинаковые uid, но вход в систему выполняется снова и снова. Есть ли проблемы, когда я так программирую?

1 Ответ

0 голосов
/ 29 мая 2020

Я решил проблему с помощью result.additionalUserInfo.isNewUser . Это может проверить, что пользователь впервые вошел в систему.

auth.signInWithPopup(provider).then(result => {
        const user = result.user;
        const uid = user.uid;
        const name = user.displayName;
        const photoURL = user.photoURL;

        // push data when first sign in.
        console.log("first sign in user", result.additionalUserInfo.isNewUser);
        if (result.additionalUserInfo.isNewUser) {
            firestore.collection('Users').add({
                uid: uid,
                photoURL: photoURL,
                name: name,
            })
            .then((docRef) => {
                console.log("Document written with ID: ", docRef.id);
            })
            .catch((error) => {
                console.error("Error adding document: ", error);
            });
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...