【发布时间】: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)"
请帮忙,我做错了什么?
【问题讨论】:
-
即使我的用户已通过身份验证,我也会收到权限被拒绝错误,我也使用了完全相同的签到规则,但似乎失败了
标签: firebase plugins firebase-authentication flutter google-cloud-firestore