创建用户正在使Cloud Functions迈出第一步

时间:2019-05-03 14:30:30

标签: angular google-cloud-firestore google-cloud-functions ionic4

因此,我使用Cloud Functions将数据持久存储在Firestore中,问题在于更新行上的不一致,当我执行该函数时,有时它实际上并不会更新UID(我将其设置为userRecord。 uid),就好像完全没什么一样跳过,让我绝对发疯了!

Https可调用函数

   exports.createUser = functions.https.onCall((data, context) => {

      return isAdmin(context.auth.uid)
      .then(result => {

        if(result === false) {

          return "Você não possui acesso a essa função";

        }

        return createUser(data.usuario);

      })
      .catch(error => {

        return error.message;

      });

    });

    function createUser(usuario:Usuario): Promise<void> {

      let uid;

      return admin.auth().createUser({

        email: usuario.email,
        password: usuario.senha,

      })
      .then(userRecord => {

        uid = userRecord.uid;

        userRole(usuario.role, userRecord);

      })
      .then(() => {

        db.collection('usuario').doc(uid).set(usuario); 

      })
      .then(() => {

        db.doc('usuario/'+uid).update({uid:uid});

      })
      .then(()  => {

        return 'O usuário '+`${usuario.nomeCompleto} `+'foi cadastrado com sucesso, recebendo o acesso de '+`${usuario.role}`;

      })
      .catch(error => {

        return error.message;

      });

    }

    function isAdmin(uid) {

      return admin.auth().getUser(uid)
      .then(userRecord => {

        if(userRecord.customClaims.admin === true) {
          return true;
        }

        return false;

      })
      .catch(() => {

        return false;

      });

    }

    function userRole(usuario:string, userRecord) {

      if(usuario === 'Vendedor') {

        adm.setCustomUserClaims(
          userRecord.uid, {vendedor: true}
        );

      } else if(usuario ==='Admin') {

        adm.setCustomUserClaims(
          userRecord.uid, {admin: true}
        );

      } else if(usuario ==='Supervisor') {

        adm.setCustomUserClaims(
          userRecord.uid, {supervisor: true}
        );

      } else if(usuario ==='Faturamento') {

        adm.setCustomUserClaims(
          userRecord.uid, {faturamento: true}
        );

      }

    }

应用类中的变量

   createUser = firebase.functions().httpsCallable('createUser');

接收值的函数

    cadastrarUsuario() {

      const usuario = this.formCriarUsuario.value;
      const id = this.db.createId();

      this.createUser({usuario, id}).then(result => {

        this.toast.toastMessage(result.data);

      }). catch(error => {

        this.toast.errorToast('Erro ao cadastrar usuário', error.message);

      });

    }

1 个答案:

答案 0 :(得分:0)

进行了一些研究,现在一切正常!

static