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

React Native Expo中Cloud Firestore连接失败权限拒绝问题求助

React Native Expo中Firestore权限拒绝及连接失败问题排查

错误 [2022-10-07T15:34:49.615Z] @firebase/firestore: Firestore (9.6.11): 无法连接到Cloud Firestore后端。连接失败1次。最新错误:FirebaseError: [code=permission-denied]: 资源项目projectId: ,. 权限被拒绝。
这通常表示您的设备当前网络连接异常。客户端将在离线模式下运行,直到成功连接到后端。

相关代码

firebase.js

import firebase from "firebase/compat/app";
import "firebase/compat/firestore";
import "firebase/compat/storage";
import { getFirestore } from "firebase/firestore";
import { initializeApp } from "firebase/app";

const firebaseConfig = {};

if (!firebase.apps.length) {
  firebase.initializeApp(firebaseConfig);
}
export const app = initializeApp(firebaseConfig);
export const db = getFirestore(app);

export { firebase };

package.json依赖片段

"dependencies": {
    "@expo/webpack-config": "^0.17.0",
    "@react-native-community/masked-view": "^0.1.11",
    "@react-native-picker/picker": "2.4.2",
    "@react-navigation/drawer": "^6.4.3",
    "@react-navigation/native": "^6.0.11",
    "@react-navigation/native-stack": "^6.7.0",
    "@react-navigation/stack": "^6.2.3",
    "expo": "~46.0.7",
    "expo-image-picker": "^13.3.1",
    "expo-status-bar": "~1.4.0",
    "expo-updates": "~0.14.6",
    "firebase": "^9.6.11",
    "lottie-react-native": "5.1.3",
    "react": "18.0.0",
    "react-dom": "18.0.0",
    "react-native": "0.69.6",
    "react-native-dotenv": "^3.3.1",
    "react-native-elements": "^3.4.2",
    "react-native-gesture-handler": "^2.5.0",
    "react-native-modal": "^13.0.1",
    "react-native-reanimated": "^2.9.1",
    "react-native-safe-area-context": "4.3.1",
    "react-native-screens": "~3.15.0",
    "react-native-web": "~0.18.7"
  },

排查与解决步骤

1. 补全Firebase配置信息

当前firebaseConfig为空对象,导致无法关联到正确的Firebase项目。需从Firebase控制台获取完整配置,格式示例:

const firebaseConfig = {
  apiKey: "YOUR_API_KEY",
  authDomain: "YOUR_AUTH_DOMAIN",
  projectId: "YOUR_PROJECT_ID",
  storageBucket: "YOUR_STORAGE_BUCKET",
  messagingSenderId: "YOUR_SENDER_ID",
  appId: "YOUR_APP_ID"
};

错误信息中projectId: ,明确说明该字段缺失,必须补全所有配置项。

2. 修复重复初始化问题

代码同时混用了Compat模式和v9模块化模式初始化Firebase,会导致重复初始化冲突。推荐统一使用v9模块化模式:

import { initializeApp } from "firebase/app";
import { getFirestore } from "firebase/firestore";
import { getStorage } from "firebase/storage";

// 填写完整配置
const firebaseConfig = { /* ... */ };

// 仅初始化一次
const app = initializeApp(firebaseConfig);

// 获取服务实例
export const db = getFirestore(app);
export const storage = getStorage(app);

若需兼容旧代码保留Compat模式,需避免重复初始化:

import firebase from "firebase/compat/app";
import "firebase/compat/firestore";
import "firebase/compat/storage";
import { getFirestore } from "firebase/firestore";

const firebaseConfig = { /* ... */ };

let app;
if (!firebase.apps.length) {
  app = firebase.initializeApp(firebaseConfig);
} else {
  app = firebase.app();
}

export const db = getFirestore(app);
export { firebase };

3. 调整Firestore安全规则

permission-denied的核心原因是安全规则限制访问:

  • 开发测试阶段可临时设置宽松规则(上线前必须修改):
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}
  • 生产环境需配置严格规则,例如仅允许认证用户访问:
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

修改规则后需在Firebase控制台点击发布生效。

4. 验证项目与网络状态

  • 确认Firebase控制台中已创建并启用Firestore数据库;
  • 检查设备网络是否正常,可尝试访问Firestore服务域名测试连通性;
  • 确认项目未被Firebase封禁或限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:45:27