创建用户是 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;
}
}
所以我使用 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;
}
}