错误:Firebase:未创建Firebase应用“ [DEFAULT]”

时间:2019-06-17 23:12:33

标签: firebase react-native

我有一个使用Firebase进行各种功能的React Native应用程序。在我收到以下错误之前,它已经完美运行了2周。我没有更改App.js中的任何内容,所以不知道为什么会遇到这个问题。

  

[DEFAULT]:Firebase:未创建Firebase应用程序'[DEFAULT]'-调用Firebase App.initializeApp()(app / no-app)。

这是我的配置代码放在我的App.js中:

const firebaseConfig = {
    apiKey: '<api-key>',
    authDomain: '<app-name>.firebaseapp.com',
    databaseURL: 'https://<app-name>.firebaseio.com',
    projectId: '<project-id>',
    storageBucket: '<app-name>.appspot.com',
    messagingSenderId: '<messaging-sender-id>',
    appId: '<app-id>'
};
firebase.initializeApp(firebaseConfig);

仅当我在其中一个组件中注释掉以下Firebase代码时,此代码才运行:

const { currentUser } = firebase.auth();
console.log(currentUser);

这是我的console.log(firebase.app());

enter image description here

4 个答案:

答案 0 :(得分:1)

更新 您在componentDidMount上具有所有配置设置,可能会运行几次,而这会导致您遇到问题,我进行了以下更改,并像一种魅力一样工作:

我在firebase.js旁边的根目录上创建一个App.js,文件看起来像这样

import `firebase/app`
require(`firebase/auth`)

const firebaseConfig = {
    apiKey: '<api-key>',
    authDomain: '<app-name>.firebaseapp.com',
    databaseURL: 'https://<app-name>.firebaseio.com',
    projectId: '<project-id>',
    storageBucket: '<app-name>.appspot.com',
    messagingSenderId: '<messaging-sender-id>',
    appId: '<app-id>'
};
if (!firebase.apps.length) {
   firebase.initializeApp(firebaseConfig);
}

export auth = firebase.auth()
export default firebase

然后您的App.js如下所示:

import React, { Component } from 'react';
import { Provider } from 'react-redux';
import { createStore, applyMiddleware } from 'redux';
import reducers from './reducers';
import ReduxThunk from 'redux-thunk';
import Router from './Router';
import { auth } from './firebase' // <----

class App extends Component {
    componentDidMount () {
       this.checkAuth()
    }
    checkAuth = () {
       auth.onAuthStateChanged(function(user, err) {
          console.log(user);
            if (user) {
              console.log(user);
               Actions.signUpVerify();
            } else {
                console.log(err);
            }
      });
    }

    render() {
        const store = createStore(reducers, {}, applyMiddleware(ReduxThunk));
        return (
            <Provider store={store}>
                <Router />
            </Provider>
        )
    }
}

export default App;

您不应在渲染方法上运行auth,因为它可能会多次运行。

答案 1 :(得分:1)

如果您仍然对此Error: Firebase: No Firebase App '[DEFAULT]' has been created感到不安,由于初始化应用程序的默认名称为'[DEFAULT]',请尝试指定它是什么应用程序,.initializeApp的重载参数为1至2克服这个错误,我为您提供了完美的例子

//firebase.js
const config = {...}
firebase.initializeApp(config, 'YouAppName');

//loading.js
firebase.app('YouAppName').auth().onAuthStateChange( user=> {
    navigation.navigate(user ? 'Home' : 'Login')
})

欢迎:)

答案 2 :(得分:0)

enter image description here

在react native应用中,您无需从javascript端配置firebase。
例如,在IOS方面,在AppDelegate.m中添加以下行以手动初始化firebase。

在文件顶部导入Firebase模块:

#import <Firebase.h>

didFinishLaunchingWithOptions方法中,添加configure方法:

(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    if ([FIRApp defaultApp] == nil) {
      [FIRApp configure];
    }
}

答案 3 :(得分:0)

我过去在几乎所有的Firebase项目中都遇到相同的问题,但是解决您的问题很容易。您正在尝试查看经过身份验证的用户。问题在于该方法是异步的,实现方式不正确。您要做的是使用firebase.onAuthstateChanged方法并将其放置在Firebase初始化区域之后,如下所示:

firebase.initializeApp({
  apiKey: '<api-key>',
  authDomain: '***',
  databaseURL: '***',
  projectId: '***',
  storageBucket: '***',
  messagingSenderId: '***',
  appId: '***',
  measurementId: 'G-HSYR9HXZF6',
});
// Enabling Offline Capability
firebase.firestore().settings({
  cacheSizeBytes: firebase.firestore.CACHE_SIZE_UNLIMITED,
});
firebase.firestore().enablePersistence();
// Listen to when a user logs in or logs out
firebase.auth().onAuthStateChanged((user) => {
  if (user) {
    const userDetails = {
      id: user.uid,
      name: user.displayName,
      email: user.email,
      provider: user.providerData[0].providerId,
    };
    console.log(userDetails)
  } else {
    console.log('No User Found')
  }
});