Firebase 安全权限在使用 isString 时告知字符串不是字符串

Firebase Security Permissions telling that a string is not a string while using isString

所以我正在将我的令牌发送到服务器,但出了点问题。我去测试我在 Firebase 模拟器上的权限,发现 .validate 行告诉我这是错误的。这是我的安全规则

{
    "rules":{
        "tokens":{
        "users":{
                "$uid":{
                  ".read":"auth !== null && auth.uid === $uid",
                  ".validate":"newData.isString()", // wrong here. idk why
                  ".write":"auth !== null && $uid === auth.uid && (!data.exists() || newData.val() !== data.val())"
                }
            }
        }
    }
}

数据结构:

root
  |-  tokens
       |- users
           |- uid:token_value

我的输入如下:

模拟类型:写入

位置: /tokens/users/hA4hZrBieISwMOZaMYe7m6K5tpI3

数据(JSON):

{
  "hA4hZrBieISwMOZaMYe7m6K5tpI3": "hi"
}

已验证: 正确

供应商: Google

UID: hA4hZrBieISwMOZaMYe7m6K5tpI3

问题是数据 (JSON) 中的 "hi" 被认为是非字符串值。有什么想法吗?

您要写入 /tokens/users/hA4hZrBieISwMOZaMYe7m6K5tpI3 的新数据不是字符串,而是 JSON 对象:

{
  "hA4hZrBieISwMOZaMYe7m6K5tpI3": "hi"
}

要验证 hA4hZrBieISwMOZaMYe7m6K5tpI3 是一个字符串值:

{
    "rules":{
        "tokens":{
            "users":{
               "$uid":{
                  ".read":"auth !== null && auth.uid === $uid",
                  "$key": {
                     ".validate":"newData.isString()"
                  },
                  ".write":"auth !== null && $uid === auth.uid && (!data.exists() || newData.val() !== data.val())"
                }
            }
        }
    }
}