Firebase生成OTP报错E.164:意大利手机号码格式无效如何解决?
Firebase意大利手机号OTP生成E.164格式报错解决方案
核心原因
E.164是国际通用的电话号码标准格式,要求结构为+[国家码][不含前导0的本地号码],总长度不超过15位,意大利手机号国家码为+39,不符合该规则就会触发Firebase报错。
可落地解决步骤
- 检查号码输入格式
- 意大利本地手机号无前置0,本地号码首位为3、长度为10位,拼接后完整格式示例:
+393331234567 - 过滤所有非数字字符(除开头的+),不要保留空格、横杠、括号等分隔符
- 意大利本地手机号无前置0,本地号码首位为3、长度为10位,拼接后完整格式示例:
- 优化代码格式化逻辑
- 避免重复拼接国家码:确认调用
signInWithPhoneNumber方法时,没有出现用户已输入+39前缀,代码二次拼接导致+39+39xxxx的错误格式 - 建议引入
libphonenumber库做标准化校验,示例代码:import { parsePhoneNumberFromString } from 'libphonenumber-js' // userInputPhone为用户输入的手机号,IT是意大利国家简码 const phoneObj = parsePhoneNumberFromString(userInputPhone, 'IT') if (phoneObj?.isValid()) { // 直接输出合规E.164格式传给Firebase即可 const standardPhone = phoneObj.format('E.164') }
- 避免重复拼接国家码:确认调用
- 检查Firebase控制台配置
- 进入「身份验证」-「登录方式」-「电话」设置页,确认意大利(+39)没有被加入号码拦截列表
- 关闭自定义的号码校验规则做测试,排除规则误拦截问题
- 验证测试
用标准合规的意大利测试号码+393331234567发起OTP请求,若不再报错则说明是用户输入或前端格式化逻辑问题。
报错参考截图

内容的提问来源于stack exchange,提问作者geeta choubey
相关产品推荐
相关产品推荐

