firebase - 如何从 auth.user.onDelete 触发器中删除文档集合和所有嵌套数据
问题描述
目前删除用户数据的逻辑如下:
import * as admin from 'firebase-admin';
import * as functions from 'firebase-functions';
const firestore_tools = require('firebase-tools');
admin.initializeApp();
const Auth = admin.auth();
const UsersCollection = admin.firestore().collection(`users`);
exports.deleteUserDocuments = functions.auth.user().onDelete((user) => {
const userID = user.uid;
UsersCollection.doc(userID)
.delete({})
.catch(error => {
return error
});
});
但是由于用户文档记录包含包含其他文档和集合的嵌套集合,因此它们仍然被保留,因为:
When you delete a document, Cloud Firestore does not automatically delete the documents within its sub-collections
我进行了一些研究,并找到了有关如何创建可调用函数的文档: https ://firebase.google.com/docs/firestore/solutions/delete-collections
但我想知道是否有可能让这个逻辑改为从auth.user.onDelete
触发器执行?
更新解决方案
const firestore_tools = require('firebase-tools');
exports.deleteUserDocuments = functions.auth.user().onDelete((user) => {
const userID = user.uid;
const project = process.env.GCLOUD_PROJECT;
const token = functions.config().ci_token;
const path = `/users/${userID}`;
console.log(`User ${userID} has requested to delete path ${path}`);
return firestore_tools.firestore
.delete(path, {
project,
token,
recursive: true,
yes: true,
})
.then(() => {
console.log(`User data with ${userID} was deleted`);
})
});
解决方案
你可以在任何你想要的触发器中运行你想要的任何代码。触发器的类型与您可以运行的代码类型没有任何关系。
推荐阅读
- java - 如何将 Azure DB URL 转换为 localhost DB URL?
- javascript - 如何通过“addEventListener”访问“calendarEvents”的数据元素?
- flutter - 在图像上添加磨砂玻璃效果
- xamarin.android - 在构建应用程序时让 java.exe 以代码 2 退出
- java - 如何覆盖抽屉导航按钮的行为并更改图标?
- ruby - 对象期望是一种类
- javascript - 如何使用正则表达式(javascript)替换css类中的背景url
- wpf - 如何从后面的代码在 XAML 中添加手势
- ruby-on-rails - 按 select().distinct() 排序?
- c# - 如何使用 C# 发出 Web 请求并获取响应