gpt4 book ai didi

node.js - 如何从 NodeJS Admin SDK 中的 Firebase 身份验证中删除最后登录时间超过特定时间的匿名用户?

转载 作者:行者123 更新时间:2023-12-02 02:18:18 26 4
gpt4 key购买 nike

从 Firebase 身份验证,我们有这样的表格,提供者可以是电子邮件、谷歌、Facebook 或匿名

enter image description here

我需要删除所有上次登录的匿名帐户是在六个月前。我需要查询那些匿名帐户,然后将它们全部删除。

但我真的不知道如何使用 Node JS admin SDK 查询所有上次登录的匿名帐户是在六个月前。是否可以?怎么做?

因为来自 the documentation in here 的 firebase(1 亿匿名帐户)存在限制.我可能不会达到那个限制,但我认为如果我可以通过在云功能中使用云调度程序创建一个 cron 作业来清理未使用的匿名帐户会更好

最佳答案

我想我找到了解决方案,我建议您阅读这个 Firebase official documentation首先,要了解如何从身份验证中获取所有用户,您需要阅读其中的解释。没有类似查询的东西来获取我们需要的数据,至少现在是这样

我将使用 Typescript 和 async/await 而不是 then/catch 和 Javascript。但是如果你使用javascript,那么你只需要稍微修改一下函数参数就可以了

import * as moment from "moment";
const auth = admin.auth();

export const deleteUnusedAnonymousUsers = async function(nextPageToken?: string) {

// this is a recursive function

try {

// get accounts in batches, because the maximum number of users allowed to be listed at a time is 1000
const listUsersResult = await auth.listUsers(1000, nextPageToken);

const anonymousUsers = listUsersResult.users.filter((userRecord) => {
return userRecord.providerData.length == 0;
});

const sixMonthAgo = moment().subtract(6, "months").toDate();

const anonymousThatSignedInMoreThanSixMonthAgo = anonymousUsers.filter((userRecord) => {
const lastSignInDate = new Date(userRecord.metadata.lastSignInTime);
return moment(lastSignInDate).isBefore(sixMonthAgo);
});

const userUIDs = anonymousThatSignedInMoreThanSixMonthAgo.map((userRecord) => userRecord.uid);

await auth.deleteUsers(userUIDs);

if (listUsersResult.pageToken) {
// List next batch of users.
deleteUnusedAnonymousUsers(listUsersResult.pageToken);
}

} catch (error) {
console.log(error);
}

};

用法

deleteUnusedAnonymousUsers();

关于node.js - 如何从 NodeJS Admin SDK 中的 Firebase 身份验证中删除最后登录时间超过特定时间的匿名用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66830220/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com