firebase 电话多因素认证中,若测试手机号被添加到“测试号码列表”,则不会真实发送短信,而是需手动输入预设的测试验证码。
firebase 电话多因素认证中,若测试手机号被添加到“测试号码列表”,则不会真实发送短信,而是需手动输入预设的测试验证码。
在使用 Firebase Authentication 的 `verifyPhoneNumber` 进行 SMS 多因素认证(MFA)时,一个常见却容易被忽略的配置陷阱是:**将真实手机号误加到了 Firebase 控制台的「测试号码列表」中**。当你将一个手机号(例如 +972...)添加到 Firebase 控制台 → Authentication → Settings → Phone numbers for testing 列表后,Firebase 会强制绕过真实短信通道——无论你调用 verifyPhoneNumber 多少次,系统都不会向该号码发送实际短信,而是直接返回一个预生成的 6 位测试验证码(如 123456),并要求你在后续 PhoneAuthProvider.credential() 中显式传入该码。
这正是你遇到「控制台日志显示 verificationId 已生成、Recaptcha 验证通过、但手机收不到短信」的根本原因。你的代码逻辑完全正确(RecaptchaVerifier 初始化、multiFactor().getSession()、PhoneAuthProvider.verifyPhoneNumber() 调用均无误),问题出在环境配置层面。
✅ 正确做法如下:
一款AI工具,主要用于使用 Codex CLI 进行深度网络搜索,适用于需要多源综合分析的复杂查询。当 `web_search`(Brave)返回结果不足,或用户……时使用,适合需要提升相关任务效率的用户。
✅ 若需真实发送短信(用于生产测试或真实用户流程):
确保该手机号未出现在测试号码列表中。可在 Firebase 控制台 > Authentication > Settings > Phone numbers for testing 中检查并移除。-
✅ 若需使用测试模式(推荐开发阶段):
保留号码在测试列表中,但必须改写验证逻辑——verifyPhoneNumber() 仍会返回 verificationId,但你不应等待短信,而应直接使用控制台中为该号码配置的固定测试码:// 假设控制台为 +972... 配置的测试码是 "654321" const credential = PhoneAuthProvider.credential(verificationId, "654321"); await multiFactor(user).enroll(credential, "phone");
⚠️ 注意事项:
- Spark 免费计划支持真实短信发送(有每日配额限制,通常为 10 条/天),前提是项目已绑定结算账号且 Identity Platform 已启用;
- 测试号码列表仅影响 verifyPhoneNumber 行为,不影响 Email/Password 登录等其他方式;
- FirebaseUI Demo 能成功,是因为它可能未将你的号码加入测试列表,或其后台使用了不同项目配置。
总结:请优先检查 Firebase 控制台中的测试号码设置——真实号码 ≠ 测试号码。移除后重新触发验证流程,短信即可正常送达。










