Angular应用程序无法访问Firestore数据库?

时间:2020-03-03 17:00:59

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

我有一个带有适当firebaseConfig的Angular应用,该应用正确配置了apiKey。初始化应用后,应该去相应的Firestore并在其中收集电子邮件地址,并将其存储以供以后的用户身份验证。问题在于,除非有用户登录,否则该应用程序将无法执行此操作。这令人困惑,因为我认为该应用程序可以访问Firestore数据库而无需,而已经有人进行了身份验证。我唯一能解决的方法是设置Firestore规则以允许全局读取访问。这样,当应用启动时,可以保证能够访问数据库和其中的电子邮件。

我在这里想念什么?

2 个答案:

答案 0 :(得分:2)

如果您的安全规则是这样的:

// Allow read/write access on all documents to any user signed in to the application
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

然后,只有通过用户身份验证的用户才能访问数据。您可以将规则更改为以下内容:

// Allow read/write access on all documents to any user signed in to the application
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth.uid != null;
    }

        match /{collectionName}/{docId} {
      allow read: if collectionName == 'emailCollection';
    }
  }
}

这样,如果用户通过了身份验证,则他们可以访问所有文档;如果集合名称等于emailCollection,那么未经身份验证的用户可以访问它。

https://firebase.google.com/docs/firestore/security/rules-structure#overlapping_match_statements

答案 1 :(得分:0)

您什么都不丢失。如果您希望用户无需预先进行身份验证就能查询Firestore集合,则该集合将需要完全的公共读取权限。不可能编写限制特定应用程序或网站访问数据库的安全规则。