首页 > 解决方案 > Angular 8 /Firebase:使用电子邮件和密码创建用户时如何设置 displayName?

问题描述

在阅读了这么多帖子和空的(或不是?)解决方案之后,我认为最好的办法是自己发布。所以我的目标只是获取用户的显示名称,以便在帖子列表或其他任何内容中,使用 uid 的作者身份看起来并不难看......这是我发现与问题相关的内容:

注册反应形式,后来在 onInit 上调用:

createForm() {
    this.registerForm = this.fb.group(
      {
        name: ['', Validators.required],
        email: ["", [Validators.required]],
        password: [null, [Validators.required, Validators.minLength(5)]],
        retype: ["", Validators.required]
      },
      {
        validator: PasswordValidators.passwordsShouldMatch
      }
    );
  }

提交方法:

 onSubmit() {
    if (this.registerForm.invalid) return;
    this.registered = true
    this.authService.registerUser(this.email.value, this.password.value).then(data=>{
      console.log(data)
    })

  }

authService 调用 uid 和 register 方法:

 constructor( private afAuth: AngularFireAuth, private router: Router) {
    this.afAuth.authState.subscribe(user=>{
      this.userId = user.uid;
     })
   }


registerUser(email:string, password:string) {
      return this.afAuth.auth.createUserWithEmailAndPassword(email, password)
        .then((result) => {
          this.router.navigate(['/login']);
          console.log(result.user)
        }).catch((error) => {
          window.alert(error.message)
        })
    }

当记录这一行时this.afAuth.authState.subscribe(user=>{ this.userId = user.uid;,实际上是记录用户,我可以看到整个对象和显示名称,但由于注册方法只接受 2 个参数,电子邮件和传递,我该如何解决这个问题?我已经尝试过处理 updateprofile 的方法,但我遇到了一个错误……有什么解决方案吗?谢谢

标签: javascriptangularfirebasefirebase-authentication

解决方案


如果您想设置用户帐户的显示名称,您将无法在使用 createUserWithEmailAndPassword 创建帐户时执行此操作。您必须对返回的用户对象执行对updateProfile()的后续调用。

result.user.updateProfile({
    displayName: ...
})
.then(...)
.catch(...)

您显然必须将调用中的名称传递给registerUser().


推荐阅读