Как удалить коллекцию документов и все вложенные данные из триггера auth.user.onDelete - PullRequest
2 голосов
/ 23 марта 2020

В настоящее время логика 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`);
        })
});

1 Ответ

1 голос
/ 23 марта 2020

Вы можете запустить любой код, который вы хотите, в любом триггере, который вы хотите. Тип триггера не имеет никакого отношения к типу кода, который вы можете запустить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...