繁体   English   中英

在计划操作期间使用云功能删除 Firestore 中的文档

[英]delete a document in firestore using cloud functions during scheduled operation

我目前有一个预定的 function 删除未在 24 小时内验证的用户。 我需要知道如何删除他们存储在名为“userdata”的集合中的文档,文档名称是他们的 email 地址。

从预定的作业中,我可以在数组中获取他们的 email 地址。 如何从 Firestore 中删除他们的信息?

这是计划作业的代码:

const admin = require("firebase-admin");

admin.initializeApp();
exports.scheduledFunction = functions.pubsub
 .schedule("every 24 hours")
 .onRun((context) => {
   console.log("This will be run every 24 hours!");
   var users = [];
   var unVerifiedUsers = [];
   const listAllUsers = async (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.
   listAllUsers().then(() => {
     unVerifiedUsers = users
       .filter((user) => !user.emailVerified)
       .map((user) => user.uid);
     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;
       });
   });
 });

谢谢大家,我已经解决了。 这是我的解决方案:

const functions = require("firebase-functions");
const admin = require("firebase-admin");

 
admin.initializeApp();
exports.scheduledFunction = functions.pubsub
  .schedule("every 24 hours")
  .onRun((context) => {
    console.log("This will be run every 24 hours!");
    var users = [];
    var unVerifiedUsers = [];
    var unVerifiedUsersEmail = [];
    const listAllUsers = async (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.
    listAllUsers().then(async () => {
      unVerifiedUsers = users
        .filter((user) => !user.emailVerified)
        .map((user) => user.uid);
      unVerifiedUsersEmail = users
        .filter((user) => !user.emailVerified)
        .map((user) => user.email);

      const docToDel = await admin.firestore();
      unVerifiedUsersEmail.forEach((doc) => {
        docToDel
          .collection("userData")
          .doc(doc)
          .delete()
          .then((response) => {
            console.log(`User data for ${doc} deleted`);
          });
      });

      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;
        });
    });
  });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM