[英]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.