firebase 只允许设置某些属性

firebase only allow certain properties to be set

如何为允许的属性设置规则?我只希望能够为用户设置已创建和上次更新的属性。我尝试使用变量来捕获未指定的值,但这会产生 permission_denied 错误。我假设是因为它正在将 created 或 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);

您正在向节点添加三个属性:uidcreatedlastUpdated。您的安全规则只允许 createdlastUpdated.

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

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

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