gpt4 book ai didi

firebase - 访问firebase规则中的电子邮件地址

转载 作者:行者123 更新时间:2023-12-03 06:30:40 25 4
gpt4 key购买 nike

我正在使用 Firebase 3。编写 firebase 规则时,auth 对象仅包含 uid 和提供者。有什么方法可以增强此功能以提供电子邮件地址吗?

我试图解决的问题是,我正在开发的网站的所有者希望根据用户的电子邮件地址授予用户权限,因为他不会预先知道他们的 firebase uid。

我已经看到了解决方案,建议将用户对象保留在 firebase 中(通过电子邮件),然后将其用作规则中的引用点。我看到的问题是,如果有人知 Prop 有完全权限的用户的电子邮件地址,那么调试代码并在保存到 firebase 之前操纵电子邮件地址将相当容易,这意味着它将保存他们的 firebase ID 与其他人的电子邮件地址一起。

我认为确保安全的唯一方法是在 firebase 规则的 auth 对象中提供电子邮件地址,该地址无法被黑客攻击。

我错过了什么吗?

<小时/>

更多信息

<小时/>

我们的想法是,我们可以通过将位置名称添加到用户的电子邮件地址来控制对特定位置的数据的访问:

  1. 用户由站点管理员提前手动创建,提供对数据子集的访问权限。例如
-users
-user1Email
-locations
-someLocation:true
-someOtherLocation:true
  • 用户通过 Google 进行身份验证。在客户端,我们可以在 auth.user.email 中看到他们的电子邮件地址

  • 在规则中,我想做类似的事情

  • locations : {
    "$location": {
    ".read": "root.hasChild('users/' + auth.email + '/locations/' + $location)",
    }
    }

    我知道我需要转义电子邮件地址,只是暂时保持简单。

    我已经在模拟器中对此进行了测试,如果我使用自定义提供程序并在其中提供电子邮件,则它可以完美运行,但使用谷歌规则中的“auth”仅具有 uid 和提供程序属性,而不具有电子邮件。

    另一种方法(除了使用自定义提供程序之外)是允许用户首先创建自己的帐户,然后使用其 uid 作为 key 而不是电子邮件地址将位置添加到每个用户,但所有者希望能够提前设置,以便他们第一次登录时立即显示文字。

    最佳答案

    Firebase 团队仍在努力在 auth 对象中提供电子邮件,您可以在规则中使用 auth.token.email 找到它,但有一些限制。请查看this post以获得更多详细信息。

    如果当前的 Firebase 解决方案无法满足您的所有需求,可以使用一些解决方法。

    由于您想保留当前的 ​​/users 结构,因此,每当注册新用户时,您都可以将用户 uid 链接到新分支中的相应电子邮件 /user_emails它将简单地存储 $uid: email。那么您的规则将如下所示。

     "user_emails": { 
    "$uid": {
    ".write": "auth.uid == $uid",
    ".validate": "!root.child('Users').hasChild(newData.val())"
    }
    },
    "locations": {
    "$location": {
    ".read": "root.hasChild('users/' + root.child('user_emails').child(auth.uid).val() + '/locations/' + $location)"
    }
    }

    请记住,您需要对其进行增强,以确保只有正确的用户才能编辑这个新的 user_emails 分支。

    关于firebase - 访问firebase规则中的电子邮件地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38202055/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com