Angular 8 / Firebase: как настроить displayName при создании пользователя с электронной почтой и паролем? - PullRequest
0 голосов
/ 26 февраля 2020

Прочитав так много постов и пустых (или нет?) Решений, я понял, что лучше всего было бы публиковать свои собственные. Так что моя цель - просто получить 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 и метод регистра:

 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;, фактически регистрирующая пользователя, я могу видеть весь объект и displayName, но так как метод register принимает только 2 аргумента, электронную почту и передачу, как мне обойти это? Я пробовал упор, связанный с updateprofile, но застрял на ошибке ... Есть ли решение? Спасибо

1 Ответ

1 голос
/ 26 февраля 2020

Если вы хотите установить отображаемое имя учетной записи пользователя, вы не сможете сделать это во время создания учетной записи с помощью createUserWithEmailAndPassword. Вам нужно будет выполнить последующий вызов updateProfile () для пользовательского объекта, который вы возвращаете.

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

Вам, очевидно, придется передать имя в вызове registerUser().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...