向AngularFirestoreDocument添加自定义变量/数据

向AngularFirestoreDocument添加自定义变量/数据,angular,firebase,angularfire,Angular,Firebase,Angularfire,我有一个这样的代码来登录用户并将其保存到firebase数据库 async EmailRegister(电子邮件:任意、密码:任意、显示名称:任意){ 返回此.afAuth.auth.createUserWithEmailAndPassword(电子邮件,密码) 。然后((结果)=>{ result.user.updateProfile({ displayName:displayName, 照片URL:“” }).然后(()=>{ this.updateUserData(result.user)

我有一个这样的代码来登录用户并将其保存到firebase数据库

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,例如:

  • 将kewirus传递给此方法:
  • 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()函数吗?