我有一个带有适当firebaseConfig的Angular应用,该应用正确配置了apiKey。初始化应用后,应该去相应的Firestore并在其中收集电子邮件地址,并将其存储以供以后的用户身份验证。问题在于,除非有用户登录,否则该应用程序将无法执行此操作。这令人困惑,因为我认为该应用程序可以访问Firestore数据库而无需,而已经有人进行了身份验证。我唯一能解决的方法是设置Firestore规则以允许全局读取访问。这样,当应用启动时,可以保证能够访问数据库和其中的电子邮件。
我在这里想念什么?
答案 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集合,则该集合将需要完全的公共读取权限。不可能编写限制特定应用程序或网站访问数据库的安全规则。