我正在创建一个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函数提示之后;找到取消超时的方法的技巧,我看到函数终止后运行的代码无法访问CPU,所以这段代码甚至无法工作。
有人对取消预定删除的能力来实现我所需要的方法有什么建议吗?任何免费解决方案都会有所帮助。
您可以始终创建一个集合,例如"Users_to_delete",并在文档中插入用户ID和删除日期。
例如
Users_to_delete
|----Document ID
|-------- UserID
|-------- Date_to_delete
然后在云函数中每天/小时运行一个函数,该函数将检查集合筛选与当前日期,并删除那里的每个用户。