如何编写 Firebase 安全规则,让未经身份验证的用户可以写入但只有我信任的服务器可以读取?
How do I write a Firebase security rule where unauthenticated users can write but only my trusted server can read?
我想写一条规则,从网页(未经身份验证)提交表单的人可以 .write
并且只有服务器可以 .read
两分钟之前的消息。
服务器(App Engine Python-Flask 实例)每两分钟轮询一次 Firebase,但我不断收到 JSON 反馈 {error: Permission Denied}
,而不是我请求的数据。
安全规则如下所示:
{
"rules": {
"leads": {
".write": true,
"$user_id": {
".write": true,
".read": "auth !== null && $user_id === auth.uid && data.child('CREATED').val() > (now - 120000)"
}
}
}
}
模拟器告诉我:
Attempt to read /leads with auth={"provider":"custom","uid":"lead_checker"}
/
/leads
No .read rule allowed the operation.
Read was denied.
任何人都可以发现我做错了什么或提供合适的替代品吗?
当你的读取规则中有像$user_id === auth.uid
这样的子句时,它表示:当当前用户的uid与节点名称匹配时,可以读取此数据。所以对于您的用户 lead_checker
意味着它可以读取名为 lead_checker
.
的节点
您可能想要做的是允许 lead_checker
读取每个用户节点:
{
"rules": {
"leads": {
"$user_id": {
".write": true,
".read": "auth.uid == 'lead_checker'"
}
}
}
}
有了这个,领导检查员可以到达 leads
下的每个节点。请注意,它仍然无法读取 leads
节点本身。如果需要,将读取规则向上移动一级:
{
"rules": {
"leads": {
".read": "auth.uid == 'lead_checker'"
"$user_id": {
".write": true,
}
}
}
}
我想写一条规则,从网页(未经身份验证)提交表单的人可以 .write
并且只有服务器可以 .read
两分钟之前的消息。
服务器(App Engine Python-Flask 实例)每两分钟轮询一次 Firebase,但我不断收到 JSON 反馈 {error: Permission Denied}
,而不是我请求的数据。
安全规则如下所示:
{
"rules": {
"leads": {
".write": true,
"$user_id": {
".write": true,
".read": "auth !== null && $user_id === auth.uid && data.child('CREATED').val() > (now - 120000)"
}
}
}
}
模拟器告诉我:
Attempt to read /leads with auth={"provider":"custom","uid":"lead_checker"}
/
/leads
No .read rule allowed the operation.
Read was denied.
任何人都可以发现我做错了什么或提供合适的替代品吗?
当你的读取规则中有像$user_id === auth.uid
这样的子句时,它表示:当当前用户的uid与节点名称匹配时,可以读取此数据。所以对于您的用户 lead_checker
意味着它可以读取名为 lead_checker
.
您可能想要做的是允许 lead_checker
读取每个用户节点:
{
"rules": {
"leads": {
"$user_id": {
".write": true,
".read": "auth.uid == 'lead_checker'"
}
}
}
}
有了这个,领导检查员可以到达 leads
下的每个节点。请注意,它仍然无法读取 leads
节点本身。如果需要,将读取规则向上移动一级:
{
"rules": {
"leads": {
".read": "auth.uid == 'lead_checker'"
"$user_id": {
".write": true,
}
}
}
}