繁体   English   中英

如何删除firebase最近没有登录的auth用户?

[英]How to delete firebase auth users that have not recently signed in?

我们有一个拥有约 50K 用户的应用程序,我们想删除(来自 firebase auth)自 2023 年 1 月 1 日以来未登录的所有人。

使用云功能,我可以成功删除任何特定用户。 但是,我不知道如何访问 lastSignInTime。

这是到目前为止的代码,但我无法隔离 SignInTime

exports.deleteAuthUser = functions.https.onCall(async (data, context) => {
  admin.auth().getUser(data.uid)
  .then((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    // console.log(`Successfully fetched user data: ${userRecord.toJSON()}`);
    // console.log(userRecord.metadata);
    console.log(userRecord.metadata);
    let time = userRecord.metadata.lastSignInTime.getTime()
    console.log(time)
  })
  .catch((error) => {
    console.log('Error fetching user data:', error);
  });
})

这是 userRecord.metadata { UserMetaData [ lastSignInTime: xxx ] }

在此处输入图像描述

此外,一旦我可以访问 lastSignInTime,我的计划是用 getTime() 隐藏它,然后查看它是否大于 1/1/23.getTime()

谢谢!

似乎您正在通过检查上次登录时间单独删除每个用户。相反,您可以使用admin.auth().listUsers(100)将用户分成小块,因为对所有 50K 用户执行此操作可能会达到 firebase 函数的超时限制.

我的答案是基于这个文档还有一个关于批量列出用户的部分。

我使用下面的代码列出了 100 个用户并删除了用户。虽然我只用较少的样本测试了它,但它确实有效。 我会建议您分批使用它。 而且我在这里使用了onRequest function 而不是onCall

import * as functions from "firebase-functions";
import * as admin from "firebase-admin";
admin.initializeApp();
exports.deleteAuthUser = functions.https.onRequest(async (req, res) => {
  console.log(req, res);
  admin.auth().listUsers(100)
      .then((listUsersResult) => {
        listUsersResult.users.forEach(async (userRecord) => {
          const lastSignInTime = userRecord.metadata.lastSignInTime;
          const targetDate = new Date("2023-01-17T00:00:00.000Z").getTime(); //change target date as per your needs
          const tobeCompared = new Date(lastSignInTime).getTime(); //used javascript getTime
          if (tobeCompared < targetDate) {
            await admin.auth().deleteUser(userRecord.uid)
                .then(() => {
                  console.log(`Successfully deleted user ${userRecord.uid}`);
                })
                .catch((error) => {
                  console.log(`Error deleting user ${userRecord.uid}`, error);
                });
          } else {
            console.log(`User ${userRecord.uid} 
            last signed in after January 17, 2023. Not deleting.`);
          }
        });
      })
      .catch((error) => {
        console.log("Error fetching users:", error);
      });
});

还有这个线程使用不同的方法。

上面的代码只会删除用户,不会删除他们的数据。 为此,您可以使用删除用户数据扩展。 有关如何使用它的更多详细信息,我通过文档推荐给 go

暂无
暂无

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

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