【发布时间】:2021-01-03 18:36:18
【问题描述】:
我想在用户登录时更新 Firestore 中的数据,并使用以下代码执行此操作。出于某种原因,代码不起作用(请参阅 cmets)并且不会从 firebase.User 创建自定义 User 对象。为什么会发生这种情况/我该如何解决?我没有收到任何错误。
登录时调用的代码
async emailLogIn(email: string, password: string) {
return this.auth.signInWithEmailAndPassword(email, password)
.then( async (credential) => {
this.analytics.logEvent('logged_in', { method: 'email' });
const firebaseUser = credential.user;
if(firebaseUser) {
const user = await this.createUserFromFirebaseUser(firebaseUser);
console.log(user); // This doesn't print anything
this.updateUserData(user);
if(!firebaseUser.emailVerified) {
this.sendEmailVerification();
}
}
});
}
将firebase.User 转换为User 的代码(不起作用)
async createUserFromFirebaseUser(firebaseUser: firebase.User): Promise<User> {
console.log('createUserFromFirebaseUser()');
const currentUser = await this.user.toPromise();
console.log(currentUser); // This doesn't print anything
if(currentUser)
return currentUser;
const user: User = {
uid: firebaseUser.uid,
email: firebaseUser.email,
displayName: firebaseUser.displayName,
settings: {
language: 'English',
isPrivate: false,
newFountainNotification: true,
userFountainNotification: true,
feedbackNotification: true,
units: 'Metric'
}
}
return user;
}
从 Firestore 获取用户数据
this.user = this.auth.authState.pipe(
takeUntil(this.destroy),
switchMap( (user) => {
if(user) {
return (this.firestore.collection('users').doc(user.uid).valueChanges() as Observable<User>)
} else {
return of(null);
}
})
);
【问题讨论】:
-
问题可能出在您创建新用户对象的那一行。您将类型定义为
User。用户界面是否支持您添加的所有属性?尝试输入any看看是否可行。 -
@AbrarHossain 是的,
user变量具有User的所有属性。我认为这不是问题,因为它之前的行没有执行 (console.log(currentUser);) -
所以是打印
undefined?您的代码中的this.user是什么?
标签: javascript angular firebase