Flutter集成Firebase遇权限拒绝错误求助(新手)
我在学生项目中测试NoSQL数据库,使用Flutter通过Firebase执行查询时遇到认证错误,错误信息如下:
FirebaseException ([cloud_firestore/permission-denied] The caller does not have permission to execute the specified operation.)
我已经尝试将Firestore规则设置为完全开放(允许所有操作),但问题依旧存在。以下是相关代码和配置:
主代码(main.dart)
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; Future main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(const MyApp()); }
出错代码片段
@override void initState() { super.initState(); getUsers(); } void getUsers() async { CollectionReference collectionReference = FirebaseFirestore.instance.collection("users"); QuerySnapshot users = await collectionReference.get(); if (users.docs.length != 0) { for (var doc in users.docs) { print(doc.data()); } } }
Android 配置文件
android/build.gradle
dependencies { classpath 'com.android.tools.build:gradle:7.2.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.3.13' }
android/app/build.gradle
apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'com.google.gms.google-services' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" ... ... dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation platform('com.google.firebase:firebase-bom:31.1.0') implementation 'com.google.firebase:firebase-analytics-ktx' implementation 'androidx.multidex:multidex:2.0.1' }
pubspec.yaml
dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.2 firebase_core: ^2.3.0 cloud_firestore: ^4.1.0
已尝试的Firestore规则
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow get, update, create,read, write, delete: if true; } } }
排查与解决步骤
确认规则已发布生效
在Firebase控制台修改规则后,必须点击发布按钮才能生效,仅保存不会应用到生产环境。检查控制台是否显示规则已成功发布。验证Firebase初始化配置
- 确保
google-services.json文件已正确放置在android/app目录下,且文件内容与Firebase控制台下载的一致。 - 若涉及iOS平台,确认
GoogleService-Info.plist已正确添加到Xcode项目中。
- 确保
修复依赖版本兼容性
当前使用的firebase_core: ^2.3.0、cloud_firestore: ^4.1.0与Firebase BOM版本31.1.0存在版本不匹配问题,建议更新为兼容版本:- 更新
pubspec.yaml中的依赖:firebase_core: ^2.15.0 cloud_firestore: ^4.8.2 - 同步更新Android端的Firebase BOM版本:
implementation platform('com.google.firebase:firebase-bom:32.0.0')
执行
flutter clean和flutter pub get刷新依赖。- 更新
清除应用缓存并重启
卸载应用后重新安装,清除本地缓存的旧规则配置;同时重启Flutter开发环境。确认Firestore实例匹配
若项目使用了自定义Firestore数据库实例,需在初始化时指定对应配置,确保代码调用的实例与规则配置的数据库一致:await Firebase.initializeApp( options: FirebaseOptions( projectId: "你的项目ID", appId: "你的应用ID", databaseURL: "https://你的数据库地址.firebaseio.com", // 其他必要配置项 ), );检查网络与项目状态
确保设备网络正常,无防火墙或代理限制Firebase服务访问;同时在Firebase控制台确认项目状态正常,未被暂停或限制。
内容的提问来源于stack exchange,提问作者SamirVega

