我使用的是Firebase 3. 编写Firebase规则时,auth对象只包含uid和提供者。有没有什么方法可以增强这个功能来提供电子邮件地址?访问Firebase规则中的电子邮件地址
我试图解决的问题是,我正在处理的网站的所有者想根据他们的电子邮件地址来授予用户权限,因为他不会预先知道他们的firebase。
我已经看到了解决方案,建议将用户对象保存在firebase(使用电子邮件),然后将其用作规则中的参考点。 我可以看到的问题是,如果有人知道具有完全权限的用户的电子邮件地址,那么在保存到Firebase之前调试代码并操作电子邮件地址会相当容易,这意味着它将保存它们Firebase ID与其他人的电子邮件地址一起。
为了安全起见,我唯一能看到的方法是在firebase规则中的auth对象中提供电子邮件地址,这些地址不能被黑客入侵。
我错过了什么吗?
更多信息
的想法是,我们可以通过添加位置名用户的电子邮件地址,控制访问某个具体位置的数据:
- 用户是由网站管理员手动提前创建,提供对数据子集的访问。 e.g
-users
-user1Email
-locations
-someLocation:true
-someOtherLocation:true
用户通过谷歌认证。在客户端,我们可以看到在auth.user.email
他们的电子邮件地址,在规则,我要像做
locations : {
"$location": {
".read": "root.hasChild('users/' + auth.email + '/locations/' + $location)",
}
}
我知道我需要逃避的电子邮件地址,只是为了保持现在简单。
我已经在模拟器中测试过了,如果我使用自定义提供程序并在其中提供电子邮件,但它在规则中仅使用uid和提供程序属性,而不使用电子邮件,但它完美地工作。
替代方案(除使用自定义提供者之外)是允许用户先创建自己的帐户,然后将位置添加到每个用户使用他们的uid作为关键字而不是他们的电子邮件地址,但所有者想要以便能够提前设置它,以便他们第一次马上登录它的话。
你能描述一下你正在处理的确切用例吗?你是什么意思,“他不会预先知道他们的火炉基地”?用户在尝试做任何你期望的事情时会被认证吗? – adolfosrs
抱歉花了我一秒来很好地格式化代码,但现在应该可读。 – John
电子邮件地址现在在安全规则中的'auth'变量中经常可用。查看http://stackoverflow.com/questions/37986097/how-can-we-guarantee-that-the-email-saved-by-the-firebase-user-is-indeed-his-own –