Firebase身份验证规则检查电子邮件

时间:2017-03-06 18:16:18

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

我只允许对已在用户列表中包含电子邮件地址的经过身份验证的用户授予写入权限。

我的用户列表如下所示:

{
  "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身份验证的用户的电子邮件地址,但实际用户出现在我的用户数据库列表中。

1 个答案:

答案 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 #AskFirebaseFirebase android : make username unique或我的回答:https://youtu.be/66lDSYtyils?t=6m15s