【发布时间】:2019-09-22 02:59:24
【问题描述】:
所以我使用 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);
});
}
【问题讨论】:
-
isAdmin函数是什么? -
基本上是一个检查功能,看请求人是否有管理员自定义声明
-
检查这是一个异步任务。您可能需要仔细链接不同异步任务返回的不同承诺。
标签: angular google-cloud-firestore google-cloud-functions ionic4