我正在Firebase中创建一个云功能,需要一些帮助,我正在尝试删除用户表单Firebase,并在一个云功能中从Firestore中删除其文档。
我如何才能为auth和firestore进行批处理作业/事务,可以说用户尝试删除其帐户,但是由于某种原因user.delete()函数不起作用(可以说它在Firebase端处于关闭状态)在那一刻)。用户将收到一条错误消息,提示我们无法删除他的帐户,但是当他尝试再次登录时,他也会收到一条错误消息,因为他的文档不存在。
我查看了firebase扩展以删除用户数据,但它并没有删除用户帐户,并且似乎有相同的问题。
我是否需要在app / cloud-functions中处理这种极端情况,是Firebase应该处理的事情,还是我只是弄错了什么?
这是我的代码,如果有帮助的话:
const functions = require("firebase-functions");
const admin = require("firebase-admin");
exports.deleteUser = functions.https.onCall(async (data, context) => {
try {
const uid = context.auth.uid;
const db = admin.firestore();
const collection = db.collection("users");
await collection.doc(uid).delete();
await admin.auth.deleteUser(uid); // what if this line fails?
return "success";
} catch (err) {
console.error(err);
return "error";
}
});
答案 0 :(得分:1)
此行没有按照您认为的去做:
const user = await admin.auth().currentUser;
user
将是undefined
,因为admin.auth()
没有名为currentUser
的属性(它是Auth对象)。后端SDK中不存在“当前用户”的概念。它只是一个前端概念。但是,您所拥有的是字符串uid
,它是调用该函数的经过身份验证的用户的UID。
如果您要使用Firebase Admin SDK删除由uid
字符串标识的用户,则只需调用deleteUser(uid):
await admin.auth().deleteUser(uid);
顺便说一句,Delete User Data extension不必删除用户,因为它通过响应用户使用客户端SDK删除自己的帐户而起作用。实际上,这足以完成这项工作。