Запрос подтверждения отправки электронной почты с помощью firebase - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь отправить подтверждение по электронной почте, когда пользователь зарегистрируется, вот мой код в провайдере / user.ts

onCreate(form: NgForm) {
var user = new User();
user.name = form.value.name;
user.email = form.value.email;
user.contact = form.value.contact;

if(form.value.gender == "male") {
  user.gender = "male";
} else {
  user.gender = "female"
}
let loading = this.mProv.getLoader('Creating your account...', 0);
loading.present();
this.afAuth.auth.createUserWithEmailAndPassword(form.value.email, form.value.password)
.then( res=> {
  let user = firebase.auth().currentUser;
  user.sendEmailVerification();
})
  .then(data => {
    user.id = data.uid;
    this.userProvider.addUser(user)
      .then(_ =>
        loading.dismiss()
      )
      .catch(error => {
        loading.dismiss();
        this.mProv.showAlertOkMessage('Error','Sign up error. Please try again later.');
      });
  })
  .catch(error => {
    loading.dismiss();
    this.mProv.showAlertOkMessage('Error','Sign up error. Please try again later.');
  });
}

Я не знаю, куда поместить user.sendEmailVerification, данные.uid становится красным подчеркиванием, когда я ставлю

 .then( res=> {
  let user = firebase.auth().currentUser;
  user.sendEmailVerification();
})

, буду благодарен за любую помощь.

1 Ответ

0 голосов
/ 09 октября 2018

Когда вы вызываете .then(data => { ... }), аргумент для data - это то, что было возвращено предыдущим этапом цепочки, но этап, который вы вставили с user.sendEmailVerification(), ничего не возвращает.Если вы не хотите ждать завершения user.sendEmailVerification(), вы можете просто переместить этот код на следующий этап, а не использовать отдельный этап:

this.afAuth.auth.createUserWithEmailAndPassword(form.value.email, form.value.password)
  .then(data => {
    let firebaseUser = firebase.auth().currentUser;
    firebaseUser.sendEmailVerification();
    user.id = data.uid;
    this.userProvider.addUser(user)
      .then(_ =>
        loading.dismiss()
      )
      .catch(error => {
        loading.dismiss();
        this.mProv.showAlertOkMessage('Error','Sign up error. Please try again later.');
      });
  })
  .catch(error => {
    loading.dismiss();
    this.mProv.showAlertOkMessage('Error','Sign up error. Please try again later.');
  });

В качестве альтернативы вы можете использовать async / await вместо then для более легкого для понимания стиля программирования.Вот один очень простой урок , который я нашел в поиске в сети .

...