如何在Firebase身份验证/扑图中删除未经验证的电子邮件地址?

人气:572 发布:2022-10-16 标签: firebase flutter firebase-authentication

问题描述

使用Firebase身份验证/电子邮件/密码&注册后,无需验证即可保存电子邮件。我已使用Ffltter Firebase应用程序。当有人注册时,我将他们定向到电子邮件验证页面,并将他们保留在那里,直到他们验证了电子邮件。问题是,如果有人使用我的电子邮件并在没有验证的情况下删除了应用程序,邮件仍然保留在数据库中。我们如何删除未经验证的电子邮件地址?

推荐答案

您可以每天运行计划的云功能,检查并删除未经验证的用户。这也意味着你将不得不使用管理SDK,不能在颤动中完成。您可以使用以下代码创建一个NodeJS云函数并运行它。

exports.scheduledFunction = functions.pubsub.schedule('every 24 hours').onRun((context) => {
    console.log('This will be run every 24 hours!');
    const users = []
    const listAllUsers = (nextPageToken) => {
        // List batch of users, 1000 at a time.
        return admin.auth().listUsers(1000, nextPageToken).then((listUsersResult) => {
            listUsersResult.users.forEach((userRecord) => {
                users.push(userRecord)
            });
            if (listUsersResult.pageToken) {
                // List next batch of users.
                listAllUsers(listUsersResult.pageToken);
            }
        }).catch((error) => {
            console.log('Error listing users:', error);
        });
    };
    // Start listing users from the beginning, 1000 at a time.
    await listAllUsers();
    const unVerifiedUsers = users.filter((user) => !user.emailVerified).map((user) => user.uid)

    //DELETING USERS
    return admin.auth().deleteUsers(unVerifiedUsers).then((deleteUsersResult) => {
        console.log(`Successfully deleted ${deleteUsersResult.successCount} users`);
        console.log(`Failed to delete ${deleteUsersResult.failureCount} users`);
        deleteUsersResult.errors.forEach((err) => {
            console.log(err.error.toJSON());
        });
        return true
    }).catch((error) => {
        console.log('Error deleting users:', error);
        return false
    });
});

865