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

React非生产环境自动化测试:如何绕过Firebase电话验证的reCAPTCHA

在React中实现Firebase电话认证的reCAPTCHA绕过方案(测试环境)

核心思路

Firebase官方提供了测试环境专用的TestPhoneAuthProvider,可直接替代reCAPTCHA完成验证流程,无需前端渲染reCAPTCHA组件。只需根据运行环境(生产/测试)切换对应的验证器即可。

代码修改步骤

1. 环境判断逻辑

先通过环境变量区分当前运行环境:

const isTestEnvironment = process.env.NODE_ENV === 'test' || process.env.REACT_APP_TEST_MODE === 'true';

2. 重构Firebase类的认证方法

修改Firebase类,根据环境选择验证器:

import { getAuth, signInWithPhoneNumber, RecaptchaVerifier, TestPhoneAuthProvider } from "firebase/auth";

class Firebase {
  constructor() {
    const app = initializeApp(firebaseConfig);
    this.auth = getAuth(app); // 修正命名,避免和getAuth方法混淆
  }

  login(phoneNumber) {
    let appVerifier;
    if (isTestEnvironment) {
      // 测试环境:使用TestPhoneAuthProvider绕过reCAPTCHA
      appVerifier = new TestPhoneAuthProvider(this.auth);
    } else {
      // 生产环境:使用正常的reCAPTCHA验证器
      appVerifier = new RecaptchaVerifier("recaptcha-container", {
        size: "invisible",
      }, this.auth);
    }
    return signInWithPhoneNumber(this.auth, phoneNumber, appVerifier);
  }
}

3. 调整登录组件逻辑

移除全局挂载的reCAPTCHA实例,改用Firebase类封装的逻辑:

// 登录按钮点击事件(获取OTP前)
const login = async () => {
  try {
    const confirmationResult = await firebase.login("+91" + phoneNumber);
    setCaptchaVerifier(confirmationResult);
  } catch (error) {
    console.error(error);
  }
};

4. 测试环境OTP验证

测试环境可直接使用Firebase预设的测试号码和OTP(比如+16505550101对应OTP123456),验证逻辑保持不变:

// OTP验证逻辑
const verifyCode = () => {
  if (!isValidVerificationCode()) {
    setShowInvalidVerificationCode("show");
    return;
  }

  captchaVerifier
    .confirm(code)
    .catch(function (error) {
      console.error(error);
    });
};

5. 清理全局变量

删除之前直接挂载到window的recaptchaVerifier初始化代码,避免全局变量污染。

注意事项

  • 确保测试环境的环境变量配置正确,禁止在生产环境启用测试模式
  • 测试号码和OTP可参考Firebase官方预设值,也能在Firebase控制台自定义
  • 自动化测试时,直接调用登录接口并传入预设测试OTP即可完成认证

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:40:04