如何编写Firebase安全规则,未经身份验证的用户可以编写但只有我的可信服务器可以读取?

时间:2016-03-16 12:34:23

标签: firebase-security

我想写一条规则,即从网页上提交表单的人(未经身份验证的)可以.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.

有人能发现我做错了什么或提供合适的替代品吗?

1 个答案:

答案 0 :(得分:1)

如果在读取规则中有imwrite这样的子句,它会说:当当前用户的uid与节点名称匹配时,可以读取此数据。因此,对于您的用户$user_id === auth.uid,意味着它可以读取名为lead_checker的节点。

您可能要做的是允许lead_checker对每个用户节点的读取权限:

lead_checker

有了这个,潜在客户可以访问{ "rules": { "leads": { "$user_id": { ".write": true, ".read": "auth.uid == 'lead_checker'" } } } } 下的每个节点。请注意,它仍然无法读取leads节点本身。如果需要,请将读取规则向上移动一级:

leads