【问题标题】:delete a document in firestore using cloud functions during scheduled operation在计划操作期间使用云功能删除 Firestore 中的文档
【发布时间】:2022-01-15 13:26:46
【问题描述】:

我目前有一个预定功能,可以在 24 小时内删除未通过验证的用户。我需要知道如何删除他们存储在名为“userdata”的集合中的文档,文档名称是他们的电子邮件地址。

从计划的作业中,我可以在数组中获取他们的电子邮件地址。如何从 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;
       });
   });
 });

【问题讨论】:

    标签: node.js firebase google-cloud-firestore


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-02-13
      • 1970-01-01
      • 2022-01-21
      • 2018-05-19
      • 2019-08-07
      • 1970-01-01
      • 2021-08-09
      • 1970-01-01
      • 2021-02-04
      相关资源
      最近更新 更多