【问题标题】:Requesting send email verification using firebase使用 Firebase 请求发送电子邮件验证
【发布时间】:2019-03-13 22:00:57
【问题描述】:

我正在尝试在用户注册时发送电子邮件验证,这是我在 provider/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放在哪里,我放的时候data.uid有红色下划线

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

感谢所有帮助。

【问题讨论】:

    标签: typescript firebase ionic-framework firebase-realtime-database email-validation


    【解决方案1】:

    当您调用 .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,以获得更易于遵循的编程风格。这是我在web search 中找到的one very basic tutorial

    【讨论】:

    • 感谢您的解释,正如您所说,它没有返回任何内容,user.id.addUser(user) 出现错误,所以简单地说我应该写另一个函数? async userVerified() { let user = firebase.auth().currentUser; await user.sendEmailVerification();} 打扰你了,我真的是初学者,我去看看你给我的链接,谢谢你的帮助。
    • 糟糕,我并不是要隐藏外部 user 变量。请参阅更新的答案。使用单独的函数发送电子邮件验证也是一个不错的方法。
    • 它确实对我的应用程序做了一些事情,但它没有向我的电子邮件发送任何消息,我应该在sendEmailVerification() 之后添加firebaseUser = user; 吗?因为 reg 用户没有出现在数据库中
    • 我不知道如何解决这个问题。您可以考虑提交一个新问题,但除非您可以进一步缩小问题范围或提供其他人可以运行以重现问题的完整示例,否则任何人都很难提供帮助。
    • 好的,我将创建一个新问题,谢谢您的帮助
    猜你喜欢
    • 2019-06-24
    • 2018-11-21
    • 1970-01-01
    • 2017-03-17
    • 2020-08-06
    • 2017-09-09
    • 2020-10-10
    • 2020-09-08
    • 1970-01-01
    相关资源
    最近更新 更多