我正在使用firebase 3.在编写firebase规则时,auth对象只包含uid和提供者.有没有什么办法可以增强这个也提供电子邮件地址?
我想要解决的问题是,我工作的网站的所有者要根据他们的电子邮件地址权限的用户,因为他不知道他们的火力点的uid前面.
我已经看到这个解决方案建议将用户对象持久保存在firebase中(使用电子邮件),然后将其用作规则中的参考点.我可以用看到的问题是,如果有人知道拥有完全权限的用户的电子邮件地址,它会很容易调试代码,并操纵之前的电子邮件地址保存到火力点,这意味着它会拯救他们的火力点id和别人的电子邮件地址一起.
我能看到使这个安全的唯一方法是让firebase规则中的auth对象提供的电子邮件地址不能被黑客攻击.
我错过了什么吗?
更多信息
我们的想法是,我们可以通过将位置名称添加到用户的电子邮件地址来控制对特定位置的数据的访问:
-users
-user1Email
-locations
-someLocation:true
-someOtherLocation:true
Run Code Online (Sandbox Code Playgroud)
用户通过谷歌进行身份验证.在客户端,我们可以在auth.user.email中看到他们的电子邮件地址
在规则中,我想做类似的事情
locations : {
"$location": {
".read": "root.hasChild('users/' + auth.email + '/locations/' + $location)",
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我需要逃避电子邮件地址,只是为了让它保持简单.
我已经在模拟器中对此进行了测试,如果我使用自定义提供商并在那里提供电子邮件,它可以正常工作,但使用谷歌规则中的"auth"只有uid和提供商属性,而不是电子邮件.
另一种方法(不是使用自定义的供应商除外),允许用户首先创建自己的帐户,然后将位置使用他们的uid的关键,而不是他们的电子邮件地址添加到每个用户,但老板希望能提前设置,以便他们第一次立即登录.
firebase firebase-security firebase-authentication firebase-realtime-database
在我们的应用程序中,我们使用“每个电子邮件地址一个帐户”。我们希望用户使用特定的身份验证提供程序进行注册,我们会对其进行跟踪并坚持使用。
我今天注意到的是,如果我使用 Google 或 Facebook 提供商登录,然后我可以向自己发送一个密码重置链接到关联的电子邮件地址,这允许我改用电子邮件/密码提供商。根据第一个提供程序的不同,行为略有不同:
我的问题是:这种行为是有意为之,有什么办法可以关闭它吗?
如果假设用户使用 Facebook(我们跟踪)登录,然后忘记并发送密码重置,这可能会导致混淆。这不是世界末日,因为他们可以继续使用密码登录,但它肯定会弄脏水。
谢谢