问题描述
使用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
});
});