gpt4 book ai didi

node.js - 如何在可调用云函数中删除用户及其 Firestore 文档

转载 作者:太空宇宙 更新时间:2023-11-03 23:48:42 26 4
gpt4 key购买 nike

我正在 firebase 中创建一个云函数,需要一些帮助,我正在尝试从一个云函数中的 firebase 中删除用户并从 firestore 中删除他的文档。

如何为 auth 和 firestore 进行批处理作业/事务,假设用户尝试删除他的帐户,但由于某种原因 user.delete() 函数不起作用(假设当时它在 firebase 端关闭)。用户将收到错误消息,表明我们无法删除他的帐户,但当他尝试再次登录时,他也会收到错误消息,因为他的文档不存在。

我查看了 Firebase 扩展来删除用户数据,但它没有删除用户帐户,而且似乎也有同样的问题。

我是否需要在应用程序/云功能中处理此类边缘情况,这是 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";
}
});

最佳答案

这条线没有做你认为它正在做的事情:

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 响应用户删除自己的帐户来工作的。这实际上应该足以使这项工作成功。

关于node.js - 如何在可调用云函数中删除用户及其 Firestore 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60133282/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com