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

使用Firebase+React Native+Expo实现手机号登录报verifier._reset is not a function错误

解决方案

错误原因

这个报错是Firebase Web SDK v9+与Expo官方提供的FirebaseRecaptchaVerifierModal组件不兼容导致的:高版本Firebase内部会自动调用验证码验证器的_reset私有方法,但Expo的该组件默认没有暴露这个方法,就会触发undefined报错,开启不可见验证时触发概率更高。

修复步骤

  • 首先可以尝试手动补全缺失的_reset方法,在调用手机号登录接口前给ref对象追加空实现的_reset方法即可,修改后的sendCode函数参考:
const sendCode = async () => {
  // 新增:手动补全_reset方法
  if(recaptchaVerifier.current){
    recaptchaVerifier.current._reset = () => {}
  }
  console.log(recaptchaVerifier.current)
  signInWithPhoneNumber(auth, phoneNumber, recaptchaVerifier.current!)
    .then(r => {
      console.log("Hej!")
    }).catch(err=>{
      console.log(err)
    })
}
  • 如果上面的方法还是报错,将FirebaseRecaptchaVerifierModal组件的attemptInvisibleVerification属性改为false,关闭不可见验证:
<FirebaseRecaptchaVerifierModal
  ref={recaptchaVerifier}
  firebaseConfig={app.options}
  attemptInvisibleVerification={false}
/>
  • 若仍未解决,检查依赖版本匹配:锁定Firebase Web SDK版本为9.22.1,这个版本和expo-firebase-recaptcha的兼容性最优,执行安装命令:
    npm i firebase@9.22.1
    同时确认你安装的expo-firebase-recaptcha版本和当前项目的Expo SDK版本完全对应,避免跨版本兼容问题。

额外注意事项

提交的手机号需要带国际区号前缀,比如中国大陆手机号需要格式为+8613xxxxxxxxx,否则Firebase也会触发相关校验报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:36:04