我只允许对已在用户列表中包含电子邮件地址的经过身份验证的用户授予写入权限。
我的用户列表如下所示:
{
"users" : {
"-KeZg-MuD-4TEOiW9i0_" : {
"email" : "example@gmail.com"
}
}
}
我尝试过使用这样的规则:
"users": {
".write" : "root.child('users/email').val() === auth.token.email"
}
"users": {
".write" : "root.child('users.email').val() === auth.token.email"
}
"users": {
".write" : "root.child('users.email').child(auth.token.email).exists()"
}
"users": {
".write" : "root.child('users').child(auth.token.email).exists()"
}
但无济于事。当我尝试添加这样的新用户时,我仍然会收到权限被拒绝错误:
firebase.database().ref('users').push({email: 'example@gmail.com'})
我上面的代码段使用example@gmail.com
代替实际经过Google身份验证的用户的电子邮件地址,但实际用户出现在我的用户数据库列表中。
答案 0 :(得分:2)
在您分享的JSON中,没有路径/users/email
。因此,此规则永远不会是true
:
root.child('users/email').val() === auth.token.email
您无法在安全规则中搜索特定值的路径。您可以检查是否存在特定的密钥。请参阅此#AskFirebase视频中的Firebase security rules to check unique value of a child #AskFirebase,Firebase android : make username unique或我的回答:https://youtu.be/66lDSYtyils?t=6m15s。