向AngularFirestoreDocument添加自定义变量/数据
我有一个这样的代码来登录用户并将其保存到firebase数据库向AngularFirestoreDocument添加自定义变量/数据,angular,firebase,angularfire,Angular,Firebase,Angularfire,我有一个这样的代码来登录用户并将其保存到firebase数据库 async EmailRegister(电子邮件:任意、密码:任意、显示名称:任意){ 返回此.afAuth.auth.createUserWithEmailAndPassword(电子邮件,密码) 。然后((结果)=>{ result.user.updateProfile({ displayName:displayName, 照片URL:“” }).然后(()=>{ this.updateUserData(result.user)
async EmailRegister(电子邮件:任意、密码:任意、显示名称:任意){
返回此.afAuth.auth.createUserWithEmailAndPassword(电子邮件,密码)
。然后((结果)=>{
result.user.updateProfile({
displayName:displayName,
照片URL:“”
}).然后(()=>{
this.updateUserData(result.user);
//这是SendVerificationMail();
this.router.navigateByUrl(“/pages/projects/all project”);
window.alert(“您已成功注册!”);
console.log(result.user)
});
}).catch((错误)=>{
window.alert(错误消息)
})
}
私有updateUserData(用户){
//登录时将用户数据设置为firestore
const userRef:AngularFirestoreDocument=this.afs.doc(`users/${user.uid}`);
常数数据={
uid:user.uid,
电子邮件:user.email,
displayName:user.displayName,
photoURL:user.photoURL,
emailVerified:user.emailVerified,
kewirusType:user.kewirusType
}
返回userRef.set(数据,{merge:true})
}
我想在用户注册时传递新数据,如
kewirusType
,如何做?要解决您的问题,请尝试将kewirusType
从表单传递到updateUserData,例如:
async EmailRegister(电子邮件:any,密码:any,显示名称:any,kewirusType:string){
返回此.afAuth.auth.createUserWithEmailAndPassword(电子邮件,密码)
。然后((结果)=>{
result.user.updateProfile({
displayName:displayName,
照片URL:“”
}).然后(()=>{
this.updateUserData(result.user,kewirusType);
//这是SendVerificationMail();
this.router.navigateByUrl(“/pages/projects/all project”);
window.alert(“您已成功注册!”);
console.log(result.user)
});
}).catch((错误)=>{
window.alert(错误消息)
})
}
updateUserData
:private updateUserData(用户,kewirusType:string){
//登录时将用户数据设置为firestore
const userRef:AngularFirestoreDocument=this.afs.doc(`users/${user.uid}`);
常数数据={
uid:user.uid,
电子邮件:user.email,
displayName:user.displayName,
photoURL:user.photoURL,
emailVerified:user.emailVerified,
kewirusType//注意这里的更改
}
返回userRef.set(数据,{merge:true})
}
额外: < >不要在应用程序中创建此数据,而是考虑使用“创建代码>用户/ {uuID}< /COD>文档,例如:
export const initUserData=functions.auth.user().onCreate((用户)=>{
const collectionDoc=admin.firestore().collection(`users`);
return collectionDoc.doc(user.uid).set({
uid:user.uid,
电子邮件:user.email,
kewirusType:“值”
//…这里是您的数据
}).然后(()=>{
log(`user${user.uid}初始化的用户数据`);
});
});
然后在应用程序中,您只需订阅/user/{uuid}
文档即可获取用户数据。将这些流程委托给应用程序之外的人更好、更安全
Firebase功能可以访问每个Firebase服务(身份验证、文档、存储等),因此基本上您可以使用它做很多事情。请澄清什么是
kewirusType
,它做什么以及在哪里初始化?它就像用户角色一样,每个用户在注册后基本上都有相同的角色?不,在注册表中,我有选择输入,以便他们可以选择他们想要的角色。就像他们可以选择是学生、老师还是其他什么,所以我不必使用createUserWithEmailAndPassword和updateProfile来存储经过身份验证的用户数据?当您使用createUserWithEmailAndPassword
(或任何其他登录方法)时,将调用上述函数。无论如何,无法将“kewirusType”从表单传递到函数。我认为在应用程序中出现文档后,您必须更新用户对象。您的意思是您的答案是更改updateUserData()函数吗?