我为我的应用程序尝试了以下安全规则,但遇到了问题。我的 firebase 中有一个用户,唯一 id 是 2。
{
"rules": {
"users": {
"$user": {
".read": "$user == auth.id",
".write": "$user == auth.id"
}
}
}
}
我已经检查过,当我执行 ".write": "$user == 2"
时,我将无法在 firebase 上写入,但是当我执行 "时.write": "$user == '2'"
,我将能够在 firebase 上写入。
另一方面,当我执行 ".write": "auth.id == 2"
时,我将能够在 firebase 上写入。
似乎 $user 被视为字符串,而 auth.id 被视为数字。我已经检查了文档 https://www.firebase.com/docs/security/但事实证明这对此事没有帮助。
在绝望的尝试中,我尝试了 ".write": "$user == auth.id.toString()"
这当然给了我这个错误:“6:29:Type error :对不是函数的目标进行函数调用。”
有人可以就这件事给我一些建议吗?
我能想到的唯一解决方法是将“userId”作为 $user 的子项包含在内,它将被读取为数字值而不是字符串。
最佳答案
有两个不明显的细节可能会让您绊倒。
安全规则始终使用 ===
您的==
会被安全规则自动转换为===
;要了解更多信息,请查看文档的“rules expressions”部分。
记录 ID 转换为字符串
您插入的用户 ID (2) 正在转换为字符串(我找不到相关文档,但请记住阅读它)。换句话说,记录 ID 是 "2"
而不是 2
,因此您在身份验证数据中的值需要与其匹配。
希望这有帮助:)
关于firebase - 安全 API 身份验证和 $ 变量不相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14019873/