Firebase Firestore规则:数据为数字时条件检查失败

Firebase Firestore规则:数据为数字时条件检查失败,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,下面是一个示例规则,当条件中使用的文档字段的数据类型为number时,该规则将失败- match message_box/{user_id}/inbox { allow read: if get('..../users/$(request.auth.uid)).data['user_id'] == user_id } 此规则总是失败,因为在数据中字段值是number,但在路径变量{user_id}中它被捕获为string 以下两个测试验证了这是一个实际问题- 在规则中,通过在比较的

下面是一个示例规则,当条件中使用的文档字段的数据类型为number时,该规则将失败-

match message_box/{user_id}/inbox {
      allow read: if get('..../users/$(request.auth.uid)).data['user_id'] == user_id
}
此规则总是失败,因为在数据中字段值是number,但在路径变量{user_id}中它被捕获为string

以下两个测试验证了这是一个实际问题-

  • 在规则中,通过在比较的右侧使用硬编码的整数值(例如-data['user_id']==456),然后读取成功。或-
  • 在数据中,将用户id字段的数据类型设置为字符串。在这种情况下 在此帖子顶部指定的匹配规则成功

  • 有什么简单的方法让它顺利运行吗?在规则文档中找不到将int转换为string的方法。

    引用了此问题

    如果将来有人遇到这种情况,请查看以下有关转换Firestore规则中数据类型的文档:

    示例:

    int("2") == 2
    int(2.0) == 2
    
    string(true) == "true"
    string(1) == "1"
    string(2.0) == "2.0"
    string(null) == "null"