当用户首次使用 Web Firebase firestore 登录时,将用户的额外数据添加到 firestore


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,但一次又一次地登录。 当我这样编程时有什么问题吗?

我通过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);
});
}
});

最新更新