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);
您正在向节点添加三个属性:uid
、created
和 lastUpdated
。您的安全规则只允许 created
和 lastUpdated
.
鉴于 uid
已被用作密钥,写入可能应该是:
var userObj = {
created: new Date().getTime(),
lastUpdated: new Date().getTime()
}
database.ref('u/' + user['uid']).set(userObj);
我还会考虑用户 ServerValue.TIMESTAMP 的时间,这可确保服务器确定时间戳并且两个值将相同。
如何为允许的属性设置规则?我只希望能够为用户设置已创建和上次更新的属性。我尝试使用变量来捕获未指定的值,但这会产生 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);
您正在向节点添加三个属性:uid
、created
和 lastUpdated
。您的安全规则只允许 created
和 lastUpdated
.
鉴于 uid
已被用作密钥,写入可能应该是:
var userObj = {
created: new Date().getTime(),
lastUpdated: new Date().getTime()
}
database.ref('u/' + user['uid']).set(userObj);
我还会考虑用户 ServerValue.TIMESTAMP 的时间,这可确保服务器确定时间戳并且两个值将相同。