【问题标题】:Why do I get PERMISSION_DENIED on flutter in firestore with public access?为什么我会在具有公共访问权限的 Firestore 中获得 PERMISSION_DENIED?
【发布时间】:2020-06-24 17:55:30
【问题描述】:

我要疯了……

Firestore 规则:

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

颤动代码(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)
  • 我尝试使用有效的电子邮件+密码成功登录;同样的错误。
  • 在 Firestore 的“规则游乐场”中,一切正常,无需任何 PERMISSION_DENIED。
  • 文档“/users/FzI6D1BIvdTU4htj5qeISev8pIo1”存在,但即使不存在,也不应该失败。

【问题讨论】:

  • 尝试将allow read, write;更改为allow read, write: if true;

标签: firebase flutter google-cloud-firestore firebase-security permission-denied


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 如果您查看代码块,您会看到安全规则授予公共访问权限。
  • 就我而言,更改规则根本没有帮助。
【解决方案2】:

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

【讨论】:

  • gcloud 与 firebase firestore 和这个问题有何关联?
猜你喜欢
  • 1970-01-01
  • 2017-09-20
  • 2017-11-17
  • 1970-01-01
  • 2019-01-19
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 2015-10-25
相关资源
最近更新 更多