所以我正在使用云功能在firestore中持久数据,问题在更新行上的不一致时,当我执行函数时,有时它确实不会更新UID(我像userrecord.uid一样设置了它,它只是跳过绝对什么都没有的,让我绝对疯了af!
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);
});
}
进行了一些研究,现在工作得很好!
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;
}
}