javascript - 如何将不同组件中的 firebase auth 和 Cloud Firestore 用作单个 Firebase 应用程序
问题描述
我正在尝试在我的 React 项目中使用 firebase 来提供身份验证和数据库功能。
在我的App.js
我有
import app from "firebase/app";
import "firebase/auth";
app.initializeApp(firebaseConfig);
在我称为<Component />
渲染的其他组件中,App.js
我有这个来初始化数据库
import app from "firebase/app";
import "firebase/firestore";
const db = app.firestore();
但是这次我得到了这个错误
Uncaught FirebaseError: Firebase: No Firebase App '[DEFAULT]' has been created - call Firebase App.initializeApp() (app/no-app).
所以我也尝试加入app.initializeApp(firebaseConfig);
这个组件,但我再次收到一个新错误,告诉我我实例化了两次。
Uncaught FirebaseError: Firebase: Firebase App named '[DEFAULT]' already exists (app/duplicate-app).
因此,我想出的一种解决方法是在创建数据库时App.js
和之后立即创建一个上下文,并将值传递给上下文并让其使用。但是我不知道这是否是一个好的解决方案。app.initializeApp(firebaseConfig);
const db = app.firestore();
<Component />
我的问题不同于How to check if a Firebase App is already initialized on Android由于一个原因。我没有尝试连接到第二个 Firebase 应用程序,因为它是针对那个问题的。我的整个项目只有一个 Firebase App,提供两种服务:auth 和 database。
我尝试了该问题的解决方案以用于<Component />
if (!app.apps.length) {
app.initializeApp(firebaseConfig);
}
const db = app.firestore();
但它没有用它仍然给我Uncaught FirebaseError: Firebase: Firebase App named '[DEFAULT]' already exists (app/duplicate-app).
错误
解决方案
您在 App 和 Component 中使用不同的 Firebase 实例。
// firebaseApp.js
import firebase from 'firebase'
const config = {
apiKey: "...",
authDomain: "...",
databaseURL: "....",
projectId: "...",
messagingSenderId: "..."
};
firebase.initializeApp(config);
export default firebase;
你可以从 firebaseApp.js 导入 firebase 并使用它。更多细节在这里
推荐阅读
- regex - 仅当并非全部都是特殊字符时才接受字符串
- azure - 发送授权标头时无法访问公共 blob url
- flutter - 使用 flutter_map 包创建没有地理位置的平铺地图
- go - 在启动 golang 时创建默认数量的数据库连接
- reactjs - 调用一个反应组件 - 作为一个函数
- oracle - 减少Oracle中的SYS_LOB文件
- salt-stack - 用一个 minion 的 IP 地址更新 minion 的配置文件
- c++ - 为什么需要空初始化的概念?
- database - 在 Moodle 3.11.2 中更改个人资料的电子邮件地址时收到“从数据库读取错误”
- artifactory - 在 Artifactory 中设置 Alpine 镜像以保持从官方存储库中删除的软件包可用