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

React Native报错TypeError: _firebase.default.auth is not a function如何解决

错误原因
  • Firebase 9.x 采用模块化API设计,完全摒弃了v8版本firebase.auth()这种命名空间调用方式,你当前的代码是v8版本的语法,和安装的9.5.0版本不兼容。
  • 你同时安装了原生React Native专用的@react-native-firebase套件和web版firebase库,二者属于完全不同的实现,混用会导致方法调用异常。
  • 即使你要使用web版Firebase 9,也没有额外导入auth功能模块,自然无法调用auth相关方法。
  • 你之前的Expo项目能正常运行,大概率是Expo内置的Firebase集成默认兼容了v8语法,和你新安装的依赖版本逻辑不同。
修复方案

你可以从以下两种方案中二选一,不要同时混用两套实现。

方案一:使用@react-native-firebase(原生RN项目推荐,性能和适配性最优)

  1. 先卸载冲突的web版firebase:
npm uninstall firebase
  1. 安装对应版本的auth模块,版本要和你现有@react-native-firebase/app版本保持一致:
npm install @react-native-firebase/auth@^13.0.1
  1. 完成安卓、iOS端的原生配置:将Firebase控制台下载的google-services.json放入安卓项目app目录,GoogleService-Info.plist放入iOS项目根目录并在Xcode中添加到项目target即可。
  2. 删除你原来的firebase.js文件,修改业务代码如下:
import auth from '@react-native-firebase/auth';

export function MainNavigator() {
  const [token, setToken] = useAtom(tokenAtom);

  useEffect(() => {
    const unsubscribe = auth().onIdTokenChanged(async (user) => {
      setToken(user ? await user.getIdToken() : null);
    });
    // 返回卸载函数避免内存泄漏
    return unsubscribe;
  }, []);
  // 其余原有代码
}

方案二:继续使用web版Firebase 9(无需修改原生配置,适合轻量使用场景)

  1. 卸载不需要的@react-native-firebase套件,避免冲突:
npm uninstall @react-native-firebase/app @react-native-firebase/functions
  1. 修改你的firebase.js配置文件,导入auth模块:
import { initializeApp } from "firebase/app";
import { getAuth } from "firebase/auth";

const firebaseConfig = {
    apiKey: "Secret stuff",
    authDomain: "Secret stuff",
    databaseURL: "Secret stuff",
    projectId: "Secret stuff",
    storageBucket: "Secret stuff",
    messagingSenderId: "Secret stuff",
    appId: "Secret stuff",
    measurementId: "Secret stuff"
};

const app = initializeApp(firebaseConfig);
export const auth = getAuth(app);
export default app;
  1. 修改业务代码,使用Firebase 9的模块化语法调用:
import { onIdTokenChanged } from "firebase/auth";
import { auth } from './firebase'

export function MainNavigator() {
  const [token, setToken] = useAtom(tokenAtom);

  useEffect(() => {
    const unsubscribe = onIdTokenChanged(auth, async (user) => {
      setToken(user ? await user.getIdToken() : null);
    });
    return unsubscribe;
  }, []);
  // 其余原有代码
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:45:04