我使用的是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 –