Flutter & Firebase - FirebaseFirestoreException:如果我按照以下方式制定了 Firebase 规则,如何获得使用 Firestore 中所有数据的

Posted

技术标签:

【中文标题】Flutter & Firebase - FirebaseFirestoreException:如果我按照以下方式制定了 Firebase 规则,如何获得使用 Firestore 中所有数据的权限?【英文标题】:Flutter & Firebase - FirebaseFirestoreException : How do I get permission to use all data in my Firestore if I made firebase rule as follow? 【发布时间】:2021-01-10 12:25:45 【问题描述】:

虽然用户已经登录,但该用户只能从 Firestore 中获取数据。而那个数据就是他自己的数据。这是为什么?那么如何从 Firestore 获取所有数据?

Firebase 规则

 //A user can only read/write their own information
    match /users/userId 
                    allow read, write: if request.auth.uid == userId;
        

权限被拒绝控制台

W/Firestore(32060): (21.3.0) [Firestore]: Listen for Query(users order by __name__) failed: Statuscode=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null
I/System.out(32060): com.google.firebase.firestore.FirebaseFirestoreException: PERMISSION_DENIED: Missing or insufficient permissions.

Firebase 代码

// All User Stream
  List<AllUser> _userList(QuerySnapshot snapshot) 
    //print('in userList');
    return snapshot.documents.map((doc) 
      //print('name : $doc.data['name']');
      return AllUser(
        name: doc.data['name'] ?? null,
        email: doc.data['email'] ?? null,
        uid: doc.data['uid'] ?? null,
        signInMethod: doc.data['signInMethod'] ?? null,
        locale: doc.data['locale'] ?? null,
        score: '20000',
      );
    ).toList();
  

  Stream<List<AllUser>> get allUserData 
    //print('in allUserData');
    return userCollection.snapshots().map(_userList);
  

请看一下我的代码。我期待着收到大家的来信。非常感谢。

【问题讨论】:

【参考方案1】:

您的 Firestore 规则如说明只能允许用户修改拥有这些文档的文档。如果您想允许任何用户读取和写入数据库,请更改为:

match /users/userId 
                allow read, write: if request.auth.uid != null;
    

请注意,这会将您的数据库向公众开放,任何经过身份验证的用户都可以读写。让我知道这是否是你想要的。

【讨论】:

我认为还有另一种方法。我想我必须要求我的主管更改此规则

以上是关于Flutter & Firebase - FirebaseFirestoreException:如果我按照以下方式制定了 Firebase 规则,如何获得使用 Firestore 中所有数据的的主要内容,如果未能解决你的问题,请参考以下文章

Flutter & Firebase:如何检查某个项目是不是存在于 Firebase 文档中的数组中

Flutter & firebase - StreamBuilder 未加载

Flutter 2 - firebase_remote_config 0.6.0 & firebase_core ^0.7.0 版本冲突

Flutter & Firebase - 从文档中获取特定字段

检查用户是不是登录 Flutter & firebase auth |

从 QuerySnapshot 和 Listview Builder (Flutter & Firebase) 中排除文档