为什么我在具有 public 访问权限的 firestore 中出现 PERMISSION_DENIED?

Why do I get PERMISSION_DENIED on flutter in firestore with public access?

我要疯了...

Firestore 规则:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{documents=**} {
      allow read, write;
    }
  }
}

flutter代码(cloud_firestore:^0.13.4+1):

FirebaseAuth.instance.signInAnonymously()
.then((AuthResult result) async { 
  DocumentSnapshot snapshot = await Firestore.instance.collection("users").document("FzI6D1BIvdTU4htj5qeISev8pIo1").get();
  print(snapshot.data.toString());
})
.catchError((error) => print("Firestore error: " + error.toString()));

调试结果:

W/Firestore(18991): (21.3.0) [Firestore]: Listen for Query(users/FzI6D1BIvdTU4htj5qeISev8pIo1) failed: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}
I/flutter (18991): Firestore error: PlatformException(Error performing get, PERMISSION_DENIED: Missing or insufficient permissions., null)

您需要更改安全规则以允许您的登录用户在数据库中执行更改。

您可以使用以下示例来设置安全规则以允许经过身份验证的用户执行读取和写入操作:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

我建议您尝试使用上面的这些安全规则,并查看官方文档中的以下文章,以及更多示例和信息,了解如何配置您的安全规则。

如果这些信息对您有帮助,请告诉我!

这些问题是由 gcloud 中的一些管理员限制引起的。如果有人遇到类似问题,请确保您的项目资源可以在 gcloud 控制台的 "IAM & Admin" 选项卡中访问。