【问题标题】: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)"

请帮忙,我做错了什么?

【问题讨论】:

  • 即使我的用户已通过身份验证,我也会收到权限被拒绝错误,我也使用了完全相同的签到规则,但似乎失败了

标签: firebase plugins firebase-authentication flutter google-cloud-firestore


【解决方案1】:

你必须这样做:

final FirebaseAuth _auth = FirebaseAuth.from(app);

否则,您将登录到由google-services.json 配置文件配置的“默认”应用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 2019-01-08
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    相关资源
    最近更新 更多