我为我的应用程序尝试了以下安全规则但遇到了问题。我的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:输入错误:对目标的函数调用不是函数。”
有人可以就此事向我提供一些建议吗?
我能想到的唯一解决方法是将“userId”作为子用户包含在$ user中,它将被读作数字值而不是字符串。
答案 0 :(得分:2)
有两个非显而易见的细节可能会使你绊倒。
始终使用===
您的==
会被安全规则自动转换为===
;要阅读更多相关信息,请查看文档的“rules expressions”部分。
记录ID转换为字符串
您插入的用户ID(2)正在转换为字符串(我找不到该文档,但请记住阅读它)。换句话说,记录ID为"2"
而不是2
,因此您在auth数据中的值需要与之匹配。
希望这会有所帮助:)
答案 1 :(得分:2)
需要在Firebase模拟器中为我的工作解决方法(在另一个答案的评论中提到):
$user == '' + auth.id