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

React Native Firebase谷歌登录报googleUser.getAuthResponse is not a function求解

报错根本原因

你混用了Web端Google登录SDK的返回对象结构和Expo expo-google-app-auth 库的返回结构。Web端gapi库返回的Google用户对象带有getAuthResponse、getBasicProfile这类实例方法,但Expo的logInAsync接口调用成功后返回的是普通JSON对象,所有身份凭证、用户信息都是直接挂载的属性,没有对应方法,所以调用getAuthResponse会抛出未定义的错误。

修复方案
  • 修改isUserEqual方法的用户匹配逻辑,将googleUser.getBasicProfile().getId()替换为googleUser.user.id,Expo返回的用户基础信息全部存在user属性下。
  • 修改onSignIn方法中凭证生成逻辑,将googleUser.getAuthResponse().id_token替换为googleUser.idToken,Expo返回的结果中直接带有idToken属性,无需调用方法获取。
  • 建议统一Firebase SDK的调用写法,你当前代码同时导入了Firebase v9的模块化API,又使用了v8版本的firebase.auth()链式调用写法,写法不统一容易引发后续其他报错,如果使用v8版本可以删除顶部v9相关API的导入语句。

核心修改代码示例

修复后的isUserEqual方法

isUserEqual(googleUser, firebaseUser) {
  if (firebaseUser) {
    var providerData = firebaseUser.providerData;
    for (var i = 0; i < providerData.length; i++) {
      if (
        providerData[i].providerId === firebase.auth.GoogleAuthProvider.PROVIDER_ID &&
        providerData[i].uid === googleUser.user.id
      ) {
        return true;
      }
    }
  }
  return false;
}

修复后的凭证生成逻辑

const credential = firebase.auth.GoogleAuthProvider.credential(
  googleUser.idToken
);
补充提示

如果后续需要获取其他用户信息,直接打印googleUser对象即可看到所有可用属性,所有信息都可以直接读取,不需要调用任何方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:54:05