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

时间:2018-02-14 20:32:25

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

以下是在条件中使用的文档字段的数据类型为数字< - p>时失败的示例规则

match message_box/{user_id}/inbox {
      allow read: if get('..../users/$(request.auth.uid)).data['user_id'] == user_id
}

此规则始终失败,因为在数据中字段值是数字,但在路径变量{user_id}中,它被捕获为字符串。

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

  1. 在规则中,通过在比较右侧使用硬编码整数值(例如 - data ['user_id'] == 456),然后读取成功。或 -
  2. 在数据中,将user_id字段的数据类型设置为字符串。在那种情况下 此帖子顶部指定的匹配规则成功。
  3. 任何简单的方法都能顺利运行吗?在规则文档中没有看到将int转换为字符串的方法。

1 个答案:

答案 0 :(得分:1)

这个问题被引用为here

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

String -> Integer

Integer -> String

示例:

int("2") == 2
int(2.0) == 2

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