You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除Firebase Auth中2023年1月1日以来未登录的用户?

解决Firebase Auth批量删除长期未登录用户问题

问题分析

你的代码中直接调用userRecord.metadata.lastSignInTime.getTime()可能报错,原因是lastSignInTime返回的是ISO 8601格式的字符串(而非Date对象),另外还要考虑从未登录过的用户(这类用户的lastSignInTime为null,需直接纳入删除范围)。同时,针对5万用户的规模,单个调用getUser效率极低,必须用批量遍历的方式处理。

解决方案

以下是完整的Cloud Functions实现,包含批量用户遍历、时间校验和删除逻辑:

exports.deleteInactiveUsers = functions.https.onCall(async (data, context) => {
  // 验证调用者权限(可选,建议添加,避免恶意调用)
  if (!context.auth || !context.auth.token.admin) {
    throw new functions.https.HttpsError('permission-denied', '仅管理员可执行此操作');
  }

  const cutoffTimestamp = new Date('2023-01-01').getTime();
  let deletedCount = 0;
  let pageToken;

  do {
    try {
      // 批量获取用户,每次最多1000条
      const listUsersResult = await admin.auth().listUsers(1000, pageToken);
      
      // 遍历当前页用户
      for (const userRecord of listUsersResult.users) {
        let lastSignInTimestamp;
        
        // 处理从未登录的用户
        if (!userRecord.metadata.lastSignInTime) {
          lastSignInTimestamp = 0;
        } else {
          // 将ISO字符串转为Date对象,再获取时间戳
          lastSignInTimestamp = new Date(userRecord.metadata.lastSignInTime).getTime();
        }

        // 对比时间戳,符合条件则删除
        if (lastSignInTimestamp < cutoffTimestamp) {
          await admin.auth().deleteUser(userRecord.uid);
          deletedCount++;
          console.log(`已删除用户: ${userRecord.uid}`);
        }
      }

      pageToken = listUsersResult.pageToken;
    } catch (error) {
      console.error('处理用户时出错:', error);
      throw new functions.https.HttpsError('internal', '批量删除用户失败', error.message);
    }
  } while (pageToken); // 循环处理所有分页

  return { message: `成功删除 ${deletedCount} 个长期未登录用户` };
});

关键说明

  • 权限校验:添加了管理员权限验证,确保只有授权用户能触发删除操作,可根据你的实际权限逻辑调整。
  • 批量遍历:使用listUsers分页获取用户,适配5万用户的规模,避免单次请求超时。
  • 时间处理:兼容从未登录的用户(lastSignInTime为null),统一转为时间戳0,确保这类用户被纳入删除范围。
  • 错误处理:捕获遍历和删除过程中的错误,避免单个用户的删除失败导致整个流程中断。

内容的提问来源于stack exchange,提问作者Greg Fielding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 15:15:10