无法在firebase身份验证角度应用之前写入firestore数据库

时间:2018-05-17 18:21:29

标签: angular firebase-realtime-database firebase-authentication google-cloud-firestore

我正在写一个有角度的应用程序。我有两个服务(auth服务)和(注册服务)。我的注册服务将用户数据(如姓名和电子邮件)写入firestore,而我的身份验证服务(从注册中获取电子邮件和密码)在我的注册服务将用户数据写入firestore后创建了一个用户帐户。这应该是一个相对简单的过程。问题是,我的authservice设法创建一个用户帐户,但我的注册服务不写入数据库。当我评论对auth服务的调用时,注册服务设法写入数据库。

验证服务

this.afs.auth.createUserWithEmailAndPassword(user.email,user.pass)

注册服务

this.afs.collection('path').add({
  firstName: rUser.firstName,
  lastName: rUser.lastName,
  email: rUser.email
}).catch(function (error) {
  console.log(error)
})

现在两个服务都能正常工作,但是当调用auth服务时注册服务不起作用。

我到处搜索但没有解决方案。

这是我对这两项服务的呼吁

this.rSERVICE.saving(registeredUser);
this.authService.signUpUser(registeredUser);

1 个答案:

答案 0 :(得分:0)

由于注册是async任务,请确保在调用注册任务之前已成功完成此任务。

实现的一种方法是让saving函数返回promise并在其signUpUser块内调用.then()。像这样:

registration.service

// saving function return a promise
  saving(user: User): Promise<boolean> {
    return new Promise(
        (resolve) => {
            this.afs.auth.createUserWithEmailAndPassword(user.email, user.pass)
                .then(() => { resolve(true); })
                .catch((error) => {
                  console.log(error);
                  throw new Error("Some error message here...");
                })})
  }

使用服务

this.rSERVICE.saving(registeredUser)
    .then(() => { this.authService.signUpUser(registeredUser); })
    .catch(error => { console.log(error); });