
使用 firebase auth 的 verifyphonenumber 时未收到短信,常见原因是将真实手机号误添加到了 firebase 控制台的“测试号码列表”中——该列表仅用于开发测试,启用后真实短信将被拦截,仅返回预设测试验证码。
使用 firebase auth 的 verifyphonenumber 时未收到短信,常见原因是将真实手机号误添加到了 firebase 控制台的“测试号码列表”中——该列表仅用于开发测试,启用后真实短信将被拦截,仅返回预设测试验证码。
在 Firebase 控制台中,Authentication → Sign-in method → Phone → Test phone numbers 下维护的号码属于“模拟验证模式”。一旦您的真实手机号(例如 +972...)被加入此列表,Firebase 将完全跳过真实短信通道,转而直接触发回调并返回一个固定格式的测试验证码(如 123456),且不会向该号码实际发送 SMS。
您代码中已正确完成以下关键步骤:
- 初始化了 RecaptchaVerifier(invisible 模式);
- 成功获取 MultiFactorSession;
- 调用 PhoneAuthProvider.verifyPhoneNumber() 并收到 verificationId(说明 SDK 流程无误);
但因号码处于测试列表,系统判定为“测试场景”,故静默绕过运营商短信网关。
✅ 解决方案:
- 登录 Firebase Console;
- 进入您的项目 → Authentication → Sign-in method → Phone;
- 在 Test phone numbers 区域,移除您的真实手机号(如 +972XXXXXXXXX);
- 保存更改(无需重启服务,配置实时生效);
- 重新触发验证流程 —— 此时将通过真实通道发送短信(注意:首次发送可能有几秒延迟,且受运营商及地区限制影响)。
⚠️ 注意事项:
- 测试号码列表仅适用于开发调试,上线前必须清空所有生产号码;
- 若需保留测试能力,建议使用专用虚拟号或沙箱号(如 Twilio 提供的测试号码),而非真实用户号码;
- Spark 免费计划支持真实短信验证(无配额限制),但需确保项目已启用 Billing 并完成 Identity Platform 配置(您已满足);
- 验证失败时,可通过浏览器开发者工具 Network 标签页查看 securetoken.googleapis.com 或 www.googleapis.com/identitytoolkit/v3/relyingparty 请求响应,确认错误码(如 MISSING_PHONE_NUMBER 或 INVALID_PHONE_NUMBER 可排除格式问题)。
? 补充验证技巧:
若仍无短信,可临时切换为 visible reCAPTCHA(size: 'normal')排除 invisible reCAPTCHA 绑定异常;也可在 FirebaseUI Demo(https://www.php.cn/link/662dcfb621b89a225cf6a8aeb65d7bd1)中复现——该 Demo 未启用测试号码列表,因此能成功接收短信,这正反向印证了问题根源在于控制台配置而非代码逻辑。











