【问题标题】:Firebase authentication rule checks emailFirebase 身份验证规则检查电子邮件
【发布时间】:2017-03-07 11:10:43
【问题描述】:

我只想向已在用户列表中拥有电子邮件地址的经过身份验证的用户授予写入权限。

我的用户列表如下所示:

{
  "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'})

我上面的 sn-ps 使用 example@gmail.com 而不是实际的 google 身份验证用户的电子邮件地址,但实际用户存在于我的用户数据库列表中。

【问题讨论】:

  • 您能否给出一个代码示例,说明您尝试过的事情并没有达到您的预期?
  • 我正在添加类似于我添加的示例的用户。之后我收到一个权限被拒绝错误。
  • 我无法充分利用您共享的代码。您可以将您的实际 JSON(因为您的规则正在检查 root)作为文本分享吗?您可以通过单击 Firebase Database console 中的导出 JSON 来获取此信息
  • 这是我的数据库的导出:pastebin.com/1KE20xz7
  • 我希望只允许通过电子邮件 example@gmail.com 进行 google 身份验证的用户具有写入权限

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


【解决方案1】:

在您共享的 JSON 中,没有路径 /users/email。所以这条规则永远不会是true

root.child('users/email').val() === auth.token.email

您不能在安全规则中搜索特定的路径。不过,您可以检查特定 key 是否存在。请参阅 Firebase security rules to check unique value of a child #AskFirebaseFirebase android : make username unique 或我在此 #AskFirebase 视频中的回答:https://youtu.be/66lDSYtyils?t=6m15s

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 2018-02-10
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 2020-11-22
    • 2019-05-20
    • 2017-08-10
    • 2018-10-09
    相关资源
    最近更新 更多