我目前正在尝试将Firebase后端连接到Flutter应用。在向Firestore创建简单的get()
请求后,我每次都会遇到相同的错误:
[cloud_firestore/permission-denied] The caller does not have permission to execute the specified operation.
我尝试过的安全规则:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.time < timestamp.date(2020, 11, 30);
}
}
}
allow read, write;
allow read, write: if true;
allow read, write: if request.auth.uid != null;
allow read, write: if request.auth != null;
allow read, write: if auth != null ;
我实际上在阳光下尝试了一切,但在读取或写入数据库方面均未成功,这使我相信错误出在代码中。我检查过以确保Firebase正确初始化,Firebase Core和Firebase Firestore也都正确初始化。
这是Firebase的问题,还是有一种执行Firestore的特定方法?
获取请求:
fetchChatMessages() async {
var messageSnapShots =
await FirebaseFirestore.instance.collection('topicofday').get();
print('Messages: $messageSnapShots');
}
}
初始化Firebase:
class MyApp extends StatelessWidget {
final Future<FirebaseApp> _initialization = Firebase.initializeApp();
@override
FutureBuilder build(BuildContext context) {
return FutureBuilder(
future: _initialization,
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return buildMaterialApp(context);
}
return Center(
child: Container(
child: CircularProgressIndicator(
backgroundColor: Theme.of(context).primaryColor,
),
),
);
},
);
}
其他信息:
不确定这是否会完全影响请求,但我使用的是状态管理提供程序。
答案 0 :(得分:1)
@DougStevenson谢谢你!原来,我试图从Firebase控制台中的错误项目中提取数据。奇怪的情况,但您的评论鼓励我跳出框框。
原因是将来自其他项目的错误GoogleService-Info.plist文件放入了我的Runner文件中。