Zvi*_*arp 6 node.js firebase firebase-authentication firebase-admin google-cloud-firestore
我正在 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";
}
});
Run Code Online (Sandbox Code Playgroud)
该行没有按照您的想法进行操作:
const user = await admin.auth().currentUser;
Run Code Online (Sandbox Code Playgroud)
user
将会是undefined
,因为admin.auth()
没有名为 的属性currentUser
(它是一个Auth对象)。后端 SDK 中不存在“当前用户”的概念。这只是一个前端概念。然而,您所拥有的是一个字符串uid
,它是调用该函数的经过身份验证的用户的 UID。
如果您想使用 Firebase Admin SDK 删除字符串标识的用户uid
,则只需调用deleteUser(uid):
await admin.auth().deleteUser(uid);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,“删除用户数据”扩展程序不必删除用户,因为它的工作原理是使用客户端 SDK 响应用户删除自己的帐户。这实际上应该足以使这项工作成功。
归档时间: |
|
查看次数: |
3249 次 |
最近记录: |