创建用户是 Cloud Functions 的一大步

Creating users is jumping one step in Cloud Functions

所以我使用 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}
        );

      }

    }

应用程序中的变量 class

   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);

      });

    }

做了一些研究,现在它工作得很好!

async function createUser(usuario:Usuario) {

      let user

      try {

        await admin.auth().createUser({

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

        })
        .then(userRecord => {

          user = userRecord;

        });

        await userRole(usuario.role, user);

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

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

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

        return retorno;

      } catch (error) {

        return error.message;

      }

    }