firebase只允许设置某些属性

时间:2016-06-14 21:40:19

标签: firebase firebase-realtime-database firebase-security

如何为允许的属性设置规则?我只希望能够为用户设置创建的和最后更新的属性。我尝试使用变量来捕获未指定的值,但这会产生permission_denied错误。我假设因为它正在解析创建或lastUpdated作为其值。

"u": {
            ".read": true,
            "$uid": {
                ".write": "$uid === auth.uid",
                ".validate": "newData.hasChildren(['created','lastUpdated'])",
                "$other": {
                    ".validate": false
                },
                "created": {
                    ".validate": "newData.isNumber()"
                },
                "lastUpdated": {
                    ".validate": "newData.isNumber()"
                }
            },
        },

失败的写入操作:

var userObj = { 
    uid: user['uid'], 
    created: new Date().getTime(), 
    lastUpdated: new Date().getTime() 
} 
database.ref('u/' + user['uid']).set(userObj);

1 个答案:

答案 0 :(得分:0)

您要向节点添加三个属性:uidcreatedlastUpdated。您的安全规则仅允许createdlastUpdated

鉴于uid已被用作密钥,写入应该是:

var userObj = { 
    created: new Date().getTime(), 
    lastUpdated: new Date().getTime() 
} 
database.ref('u/' + user['uid']).set(userObj);

我还会考虑用户ServerValue.TIMESTAMP的时间,这可以确保服务器确定时间戳,并且两个值都是相同的。