Firebase 使用 newData 进行验证
Firebase validate with newData
我正在研究 Kato 在这个 post 中展示的关于如何构建数据的优秀示例:
Firebase user account security with firebaseSimpleLogin
我没有运气得到验证以正常工作。
数据结构为:
accepted_invites
game1
desc "fun game"
invites
game1
uuidAAA true
uuidBBB true
这是一个屏幕截图:
Firebase data
如果我尝试编写以下内容
ref.child("accepted_invites").child("game1").child("userTwo").child("uuidBBB").setValue(true);
它将使用此规则在 accepted_invites 中创建条目:
".validate": "root.child('invites/'+$game_id+'/uuidBBB').exists()"
但不是
".validate": "root.child('invites/'+$game_id+'/'+newData.val()).exists()"
我尝试使用模拟器,但我越来越
类型错误:+ 仅对数字和字符串进行运算。
这是我所拥有的完整规则:
{
"rules": {
".write" : true,
".read" : true,
"accepted_invites": {
"$game_id": {
"$user_id": {
//This validate rule fails
//".validate": "root.child('invites/'+$game_id+'/'+newData.val()).exists()"
//This one works
".validate": "root.child('invites/'+$game_id+'/uuidBBB').exists()"
}
}
}
}
}
newData
关键字是引用所有传入数据的特殊属性,但在 path 表达式中不允许使用它,因为它可能不是字符串。即,它很可能是一个对象。
如果您有兴趣在路径中使用该数据的某些部分,我建议您只在更深的路径中包含另一个验证规则,例如:
{
"rules": {
".write" : true,
".read" : true,
"accepted_invites": {
"$game_id": {
"$accepting_user_id": {
"$sending_user_id": {
".validate": "root.child('invites').child($game_id).child($sending_user_id).exists()"
}
}
}
}
}
}
我正在研究 Kato 在这个 post 中展示的关于如何构建数据的优秀示例: Firebase user account security with firebaseSimpleLogin
我没有运气得到验证以正常工作。
数据结构为:
accepted_invites
game1
desc "fun game"
invites
game1
uuidAAA true
uuidBBB true
这是一个屏幕截图: Firebase data
如果我尝试编写以下内容
ref.child("accepted_invites").child("game1").child("userTwo").child("uuidBBB").setValue(true);
它将使用此规则在 accepted_invites 中创建条目:
".validate": "root.child('invites/'+$game_id+'/uuidBBB').exists()"
但不是
".validate": "root.child('invites/'+$game_id+'/'+newData.val()).exists()"
我尝试使用模拟器,但我越来越 类型错误:+ 仅对数字和字符串进行运算。
这是我所拥有的完整规则:
{
"rules": {
".write" : true,
".read" : true,
"accepted_invites": {
"$game_id": {
"$user_id": {
//This validate rule fails
//".validate": "root.child('invites/'+$game_id+'/'+newData.val()).exists()"
//This one works
".validate": "root.child('invites/'+$game_id+'/uuidBBB').exists()"
}
}
}
}
}
newData
关键字是引用所有传入数据的特殊属性,但在 path 表达式中不允许使用它,因为它可能不是字符串。即,它很可能是一个对象。
如果您有兴趣在路径中使用该数据的某些部分,我建议您只在更深的路径中包含另一个验证规则,例如:
{
"rules": {
".write" : true,
".read" : true,
"accepted_invites": {
"$game_id": {
"$accepting_user_id": {
"$sending_user_id": {
".validate": "root.child('invites').child($game_id).child($sending_user_id).exists()"
}
}
}
}
}
}