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

如何操作Firebase Authentication数据?提取180天未登录用户方法咨询

Firebase Authentication 用户数据操作与未登录用户提取方案

一、操作Firebase Authentication用户数据(标识符、提供者、创建时间等)

  • 控制台直接查看:在Firebase控制台的Authentication页面,用户列表默认展示Identifier(邮箱/手机号等)、Created(创建时间)、Signed In(最后登录时间)、User UID字段,支持按这些字段排序筛选。
  • Admin SDK批量/单个操作:借助Firebase Admin SDK可灵活获取、修改用户数据,以下是Node.js示例:
    const admin = require("firebase-admin");
    admin.initializeApp();
    
    // 获取单个用户的完整数据
    async function getUserDetail(uid) {
      const userRecord = await admin.auth().getUser(uid);
      console.log('用户标识符:', userRecord.email || userRecord.phoneNumber);
      console.log('登录提供者:', userRecord.providerData);
      console.log('账号创建时间:', userRecord.metadata.creationTime);
      console.log('最后登录时间:', userRecord.metadata.lastSignInTime);
    }
    
    // 批量拉取用户(单次最多1000条)
    async function batchListUsers() {
      let pageToken;
      do {
        const result = await admin.auth().listUsers(1000, pageToken);
        result.users.forEach(user => {
          // 按需处理每条用户数据
        });
        pageToken = result.pageToken;
      } while (pageToken);
    }
    
    // 修改用户数据(示例:更新邮箱)
    async function updateUserEmail(uid, newEmail) {
      await admin.auth().updateUser(uid, { email: newEmail });
    }
    

二、提取过去180天未登录的用户

由于控制台单次仅支持查看250条用户,批量筛选需借助以下方法:

  • Admin SDK遍历筛选:
    通过循环拉取所有用户,判断最后登录时间与当前时间的差值,筛选出符合条件的用户,示例代码:
    const admin = require("firebase-admin");
    admin.initializeApp();
    
    const INACTIVE_THRESHOLD = 180 * 24 * 60 * 60 * 1000; // 180天对应的毫秒数
    
    async function filterInactiveUsers() {
      const inactiveUsers = [];
      let pageToken;
      const now = Date.now();
      
      do {
        const result = await admin.auth().listUsers(1000, pageToken);
        result.users.forEach(user => {
          const lastSignInMs = user.metadata.lastSignInTime ? new Date(user.metadata.lastSignInTime).getTime() : null;
          // 从未登录或超过180天未登录的用户
          if (!lastSignInMs || (now - lastSignInMs) > INACTIVE_THRESHOLD) {
            inactiveUsers.push({
              uid: user.uid,
              identifier: user.email || user.phoneNumber,
              createdTime: user.metadata.creationTime,
              lastSignInTime: user.metadata.lastSignInTime || '从未登录'
            });
          }
        });
        pageToken = result.pageToken;
      } while (pageToken);
    
      // 输出或导出结果
      console.log('符合条件的未登录用户:', inactiveUsers);
    }
    
    filterInactiveUsers();
    
  • 数据存储说明:Firebase Auth的用户核心数据(包括登录时间、创建时间等)存储在Firebase后端服务器,无法直接访问底层存储,只能通过控制台、Admin SDK或Auth REST API获取。
  • 优化方案:若需频繁筛选,可在用户每次登录时,将lastSignInTimestamp同步到Firestore或Realtime Database,之后直接用数据库查询语句(如查询lastSignInTimestamp < (当前时间 - 180天)),避免全量遍历用户。

内容的提问来源于stack exchange,提问作者Filipe Bittencourt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 10:32:50