Angular和Firebase:如何设置Cloud Firestore安全规则?

时间:2018-08-22 11:50:40

标签: angular firebase google-cloud-firestore firebase-security-rules

让我问您如何在Cloud Firebase控制台中设置安全规则。我已经研究了Firebase官方文档https://firebase.google.com/docs/firestore/security/rules-conditions?authuser=0和本文https://angularfirebase.com/lessons/firestore-security-rules-guide/,但是我无法弄清我应用程序中安全规则的行为。

出了什么问题?

首先,我想从非常基本的规则类型开始。我想仍然允许用户访问产品集合,并且如果用户未经身份验证(未登录)则阻止访问订单集合。

我的规则如下:

service cloud.firestore {
  match /databases/{database}/documents {

    match /categories/{category} {
      allow read, write;
    }

    match /products/{product} {
      allow read, write, list, get, update;
    }

    match /orders/{order} {
      allow read, write: if request.auth.uid != null;
    }

  }
}

及其当前工作方式:

  • 我只能在我的应用程序管理员中读取,写入产品缩略词 面板(这样我就可以管理产品)但是在客户方面,产品是 受阻。在Firebase控制台中,此规则通过了测试(请参阅screanshot),但在开发人员中 控制台,我会看到一条消息:“缺少权限或权限不足”。 经过10分钟,结果是一样的。尚不清楚 我,因为我设置了一条规则以允许随时访问产品(第9行)。

  • 第二个问题是,如果我测试订单合集,我将遇到一个错误 “错误:simulator.rules第[13]行,第[29]列。空值错误(请参阅screanshot)。

products collection test result orders collection test result 因此,您介意帮助解决上述问题吗?

其他有用信息:

  • Angular6 | Firebase 5.2.0 | AngularCLI 6.0.8 |认证方式通过 谷歌

谢谢!

1 个答案:

答案 0 :(得分:0)

在模拟器中,您尚未打开“已验证”开关。一旦你打开它,传递的请求将具有 auth 值。当前,它为 null,因此您在尝试访问 Orders 集合时遇到错误。