Есть ли способ отложить удаление пользователя Firebase и связанных с ним данных? - PullRequest
1 голос
/ 09 апреля 2020

Я создаю приложение Flutter, которое использует Firebase в качестве бэкэнда для аутентификации с firestore в качестве базы данных и хранилищем для больших файлов для хранения некоторых пользовательских данных. Я хочу разрешить пользователям удалять свою учетную запись и все связанные с ней данные, но я не хочу, чтобы это было сделано немедленно, чтобы пользователи могли восстановить свою учетную запись, если они решат вернуться в течение 15 дней или около того.

Первоначально я думал, что смогу сделать это с помощью функции Firebase, которую я мог бы вызвать из моего приложения, которая показана здесь:

import * as functions from 'firebase-functions';

const admin = require('firebase-admin');
admin.initializeApp();

const fifteenDays = 1296000000;

export const helloWorld = functions.https.onCall((data, context) => {
    setTimeout(async () => {
        try {
            await admin.auth().deleteUser(data.id);
            console.log(`Deleted User: ${data.id}`);
            await admin.firestore().collection("users").document(data.id).delete();
            console.log(`Deleted User Firestore: ${data.id}`);
            await admin.storage().bucket().deleteFiles({
                    prefix: `userPhotos/${data.id}/`,
                    force: true,
                },
                function(err: any) {
                    if (err) {
                        console.log(err);
                    }
                    else {
                        console.log(`All the Firebase Storage files in users/${data.id}/ have been deleted`);
                    }
                }
            );
        }
        catch (error) {
            console.log(error);
        }
    }, fifteenDays);

});

Но после прочтения Советы и рекомендации по функциям Firebase , чтобы найти Метод отмены тайм-аута. Я видел, что код, запускаемый после завершения функции, не может получить доступ к ЦП, поэтому этот код даже не будет работать. Возможность отменить запланированное удаление? Любое бесплатное решение будет полезно.

1 Ответ

1 голос
/ 09 апреля 2020

Вы всегда можете создать коллекцию, например, «Users_to_delete», и в документах указать идентификатор пользователя и дату его удаления.

Например

Users_to_delete

|----Document ID

|-------- UserID

|-------- Date_to_delete

Затем запускайте функцию каждый день / час в облачных функциях, которая сверяет фильтрацию коллекции с текущим днем ​​и удаляет каждого находящегося там пользователя.

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