В мобильном приложении я использую Firebase Google OAuth для входа в систему. Как рекомендуется для мобильных устройств, я предпочитаю firebase.auth.signInWithRedirect вместо signInWithPopup.
Когда происходит вход, пользователь перенаправляется в мобильное приложение, и мое приложение получает информацию о пользователе (от поставщика OAuth) с обещанием firebase.auth.getRedirectResult.
this.afAuth.auth.getRedirectResult().then((result) => {
if (result.user) {
this.updateUserData(result.user)
// setTimeout( _ => this.updateUserData(result.user), 100);
}
})
private updateUserData(user) {
// Sets user data to firestore on login
console.log(user);
const userRef: AngularFirestoreDocument<User> = this.afs.doc(`users/${user.uid}`);
const data = {
uid: user.uid,
email: user.email,
displayName: user.displayName,
photoURL: user.photoURL
}
userRef.set(data, { merge: true }).then( _ => console.log('result'));
}
Значение результата заполнено правильно, и вызов updateUserData работает нормально, но в firestore не создается ни одной записи.
После нескольких часов исследования я заметил, что он работает нормально, вызываяupdateUserData в пределах setTimeout setTimeout( _ => this.updateUserData(result.user), 100)
Я предоставляю пример stackblitz
Я не уверен в этом обходном пути, я хотел бы знать, сталкивался ли кто-то также с этимвопрос или если способ, который я реализовал, это неправильно.