为啥这些 Firestore 规则不适用于 Flutter Firebase 插件?
Posted
技术标签:
【中文标题】为啥这些 Firestore 规则不适用于 Flutter Firebase 插件?【英文标题】:Why are these Firestore rules not working with the Flutter Firebase Plugin?为什么这些 Firestore 规则不适用于 Flutter Firebase 插件? 【发布时间】:2019-04-23 01:38:13 【问题描述】:我正在使用以下 Firebase 规则:
service cloud.firestore
match /databases/database/documents
function signedIn()
return request.auth.uid != null;
match /exampleCollectionName/exampleDocumentName
allow get: if signedIn();
allow write, list: if false;
我想阻止未登录用户的获取请求,并允许所有其他用户使用 (包括那些以匿名方式登录的人)。
这是我的飞镖代码,使用 Firebase Flutter 插件:
import 'dart:async';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart';
Future<void> main() async
final FirebaseApp app = await FirebaseApp.configure(
name: 'firestoreDatabaseExample',
options: const FirebaseOptions(
googleAppID: 'xxxxxxxx',
apiKey: 'yyyyyyyy',
projectID: 'zzzzzzzz',
),
);
Firestore firestore = Firestore(app: app);
await firestore.settings(timestampsInSnapshotsEnabled: true);
final FirebaseAuth _auth = FirebaseAuth.instance;
await _auth.signOut();
FirebaseUser firebaseUser = await _auth.signInAnonymously();
assert(firebaseUser != null);
assert(firebaseUser.isAnonymous);
assert(!firebaseUser.isEmailVerified);
assert(await firebaseUser.getIdToken() != null);
final FirebaseUser currentUser = await _auth.currentUser();
assert(firebaseUser.uid == currentUser.uid);
DocumentReference docRef =
firestore.collection('exampleCollectionName').document('exampleDocumentName');
await docRef.get().then((documentSnaphot)
if (documentSnaphot.exists) print('IS WORKING!');
, onError: (error)
print(error);
);
正如您在上面看到的,我以匿名身份登录并尝试获取文档。但是,代码返回:
"PlatformException(Error performing get, PERMISSION_DENIED: Missing or insufficient permissions., null)"
请帮忙,我做错了什么?
【问题讨论】:
即使我的用户已通过身份验证,我也会收到权限被拒绝错误,我也使用了完全相同的签到规则,但似乎失败了 【参考方案1】:你必须这样做:
final FirebaseAuth _auth = FirebaseAuth.from(app);
否则,您将登录到由google-services.json
配置文件配置的“默认”应用。
【讨论】:
以上是关于为啥这些 Firestore 规则不适用于 Flutter Firebase 插件?的主要内容,如果未能解决你的问题,请参考以下文章
Firestore 实时更新不适用于 recyclerview