swift - 如何使这些安全规则对 Firestore 满意
问题描述
因此,当我在应用商店上启动该应用时,我的安全规则开始出现权限问题,我试图找到一种解决方案,让 Firestore 不再每天向我发送电子邮件。这成为问题的功能是学生用户在我的应用程序中注册时。
因此,当用户注册时,我有一个用于验证的回调函数,当学生用户点击注册按钮时我会使用它:
func determineIfIDIsValid(isIDValidCallback: @escaping (Bool) -> ()) {
guard let schoolIDText = studentSchoolIDTextField.text else { return }
db.collection("school_users").whereField("school_id", isEqualTo: schoolIDText).getDocuments { (querySnapshot, error) in
guard error == nil else { return }
guard let query = querySnapshot?.isEmpty else { return }
if query == true {
self.showAlert(title: "No School ID Found", message: "There is currently no School associated with the School ID you input. Please re-enter a valid School ID.")
isIDValidCallback(false)
} else {
isIDValidCallback(true)
return
}
}
}
这会在用户通过身份验证之前读取 Firestore,这就是导致我的安全规则出现问题的原因。我最终将其更改为完全不安全的规则,以查看它是否有效并且确实有效,但我不希望 Firestore 每天都发送电子邮件,所以我现在想解决这个问题。
这些是我让它工作的规则,但不安全:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow write: if request.auth != null;
allow read: if true;
}
}
}
然后今天我决定尝试让它更安全一点:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow write, read: if request.auth != null;
}
match /school_users/{userID} {
allow read: if resource.data.visibility == 'public';
}
}
}
现在,我认为这会起作用,这是我的数据库和文档中的路径:
当我在规则游乐场和 iOS 模拟器中尝试这些规则时,它仍然无法按我的预期工作,并且我得到resource
一个空值错误,这对我来说不太有意义,因为文档路径确实存在. 关于如何使这些规则生效并满足 Firestore 标准的任何建议?
解决方案
推荐阅读
- sql - 要回答的 SQL 查询:如果
发生在时间点 A,是否 发生在公元前? - python - 用双字母打印单词打印两次
- javascript - Js的新手,我如何获得这个请求的价值?
- python - 输出在python中选择了分数>平均分数的变量
- c - 当随机数生成器已播种时,rand() 是否确实会产生随机值?
- javascript - rxjs - 同时具有 on-next 和 on-error 回调的运算符?
- angular - 使分页发生在内行,而不是组行本身
- matlab - 找到具有 1-d 结构的峰
- amazon-web-services - 尝试将 AWS ec2 实例用作节点时无法注册 Selenium Grid 节点
- reactjs - 使用反应动态加载图像