【问题标题】:firebase only allow certain properties to be setfirebase 只允许设置某些属性
【发布时间】:2016-06-15 11:31:04
【问题描述】:

如何为允许的属性设置规则?我只希望能够为用户设置 created 和 last updated 属性。我尝试使用变量来捕获未指定的值,但这会产生 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);

【问题讨论】:

  • 你能展示一个写操作失败,但你想成功吗?
  • var userObj = { uid: user['uid'], created: new Date().getTime(), lastUpdated: new Date().getTime() } database.ref('u/ ' + 用户['uid']).set(userObj);

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 超越!感谢您的帮助和对服务器时间戳的引用!
猜你喜欢
  • 1970-01-01
  • 2014-11-08
  • 1970-01-01
  • 2020-07-06
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 2014-11-12
  • 1970-01-01
相关资源
最近更新 更多