Firestore规则时间戳字段评估错误问题求助
Firestore规则评估错误原因及修复
错误原因
字段存在性判断语法错误
Firestore安全规则中,检查文档是否包含指定字段的正确方式是'publicationAt' in resource.data,你当前使用!('publicationAt' in resource.data.keys())的写法不符合规则语法规范,会导致逻辑评估异常。resource.data.keys()是返回字段名数组的方法,不能直接用in操作符判断字段是否存在。冗余的debug函数嵌套
在条件判断中嵌套使用debug(request.time) >= debug(resource.data.publicationAt)会干扰规则的正常评估逻辑,debug()仅需单独用于输出调试信息,无需嵌套在比较表达式中。
修复后的规则代码
function isPublished() { // 无publicationAt字段则视为已发布,否则判断时间是否达标 return !('publicationAt' in resource.data) || request.time >= resource.data.publicationAt; }
额外检查点
- 确认
publicationAt字段存储的是Firestore Timestamp类型:使用new Date()保存时,Firebase SDK会自动将其转换为Timestamp,若手动存储为字符串格式会导致时间比较失败。 - 确保查询逻辑与规则匹配:获取已发布条目时,查询需包含
publicationAt <= 当前时间的约束(或不包含该字段),避免规则与查询条件不匹配引发评估错误。
内容的提问来源于stack exchange,提问作者Coach83
相关产品推荐
相关产品推荐

