在移动应用程序上,我使用Firebase Google OAuth登录用户。按照移动设备的建议,我更喜欢firebase.auth.signInWithRedirect而不是signInWithPopup。
发生登录后,用户将通过承诺firebase.auth.getRedirectResult重定向到移动应用,并且我的应用(从OAuth提供者那里)获取用户详细信息。
dfA.join(dfB, (dfA.key == dfB.key) & (dfA.createdTime < dfB.createdTime) ).show()
正确填充结果值,并且对updateUserData的调用工作正常,但在Firestore上未创建任何记录。
经过几个小时的调查,我发现在setTimeout 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可以正常工作
我提供了一个stackblitz example
我对这种解决方法没有信心,我想知道是否有人也遇到了这个问题,或者我的实现方式是否错误。