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

Firebase staging部署如何获取并记录登录失败尝试的IP等相关信息?

针对Firebase Staging环境异常密码重置请求的信息采集方案

1. 客户端登录页前置埋点

  • 在前端登录/密码重置页面的提交逻辑中新增前置拦截层,用户点击提交密码重置请求时,先采集客户端公网IP、User-Agent、请求时间戳、输入的完整邮箱字段,先上报到你自己的日志存储(比如独立的Firestore日志集合、自建日志系统)后再向Firebase Auth发起正式请求
  • 公网IP可通过前端调用公共IP查询接口获取,不需要依赖外部跳转服务,采集到的信息可直接关联后续的请求结果

2. 云函数拦截Auth请求全量记日志

放弃前端直接调用Firebase原生sendPasswordResetEmail接口的方案,改为所有密码重置请求先触发你自定义的HTTPS云函数,在云函数中完成日志记录后再转发请求到Firebase Auth服务,可获取到最完整的请求元数据:

const { getAuth } = require("firebase-admin/auth");
const admin = require("firebase-admin");
admin.initializeApp();

exports.handlePasswordReset = functions.https.onCall(async (data, context) => {
  // 直接获取请求的核心溯源信息
  const requestIP = context.ip;
  const userAgent = context.rawRequest.headers["user-agent"];
  const targetEmail = data.email;
  const requestTime = new Date().toISOString();

  // 全量写入日志,无论用户是否存在都留痕
  await admin.firestore().collection("password_reset_attempts").add({
    ip: requestIP,
    ua: userAgent,
    email: targetEmail,
    time: requestTime,
    is_valid_user: false // 后续可补全是否为合法用户的标记
  });

  // 再调用Firebase原生的密码重置接口
  try {
    await getAuth().generatePasswordResetLink(targetEmail);
    return { success: true };
  } catch (e) {
    // 捕获用户不存在等错误,也可以在日志中更新标记
    return { success: false, error: e.code };
  }
});
  • 该方案可以覆盖所有密码重置请求,不管目标账户是否存在,都能提前记录完整的溯源信息,不会出现请求失败无日志的问题。

3. 开启Firebase Hosting访问日志导出

  • 你部署在staging.firebaseapp.com的站点可以开启Firebase Hosting的日志导出功能,所有访问请求、接口调用请求的全量信息都会同步到Google Cloud Logging中,你可以直接筛选调用Firebase密码重置接口(路径前缀为/v1/accounts:sendOobCode)的请求,直接提取对应的IP、请求参数、User-Agent等信息,不需要修改业务代码即可回溯历史请求记录。

补充防护建议

  • 在密码重置请求前新增图形验证码校验,拦截自动化批量枚举请求
  • 配置规则限制单个IP单位时间内的密码重置请求次数,超过阈值直接拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 01:06:04