В настоящее время логика c для удаления пользовательских данных выглядит следующим образом:
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
Но мне интересно, возможно ли эта логика c вместо выполнения из триггера 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`);
})
});