我坚持使用Firebase安全规则。我不明白它如何将“网址”映射到$variable
。
这两个如何映射?
"$user": {
".read": "$user == 42" // where does this $user get its value from?
}
鉴于此规则集:
{
"rules": {
"users": {
"$provider": {
"$user": {
".read": "$user == auth.id",
".write": "$user == auth.id",
}
}
}
}
}
不起作用:
Attempt to read /users/twitter/169508069 with auth={"id":169508069}
/
/users
/users/twitter
/users/twitter/169508069: "$user == auth.id"
=> false
No .read rule allowed the operation.
Read was denied.
Works :(将规则更改为固定用户ID)
Attempt to read /users/twitter/169508069 with auth={"id":169508069}
/
/users
/users/twitter
/users/twitter/169508069: "169508069 == auth.id"
=> true
Read was allowed.
根据$location variables的文档,我认为我的$user
到".read": "$user == auth.id"
的映射是正确的,但我必须遗漏一些内容。
答案 0 :(得分:2)
哇!所以实际问题是我在模拟器中将auth.id的规则注册为169508069
整数。 $ user的值为"169508069"
,即字符串。当我手动设置要比较的值(整数)时,它当然有效。
追踪非常棘手。
对Firebase人员的建议:在安全模拟器输出中打印$variable
的计算值,以帮助隔离安全问题。
对于其他人来说,只需要警惕数据类型。