2016-06-23 36 views
5

換句話說,有沒有一種方法來驗證用戶(當他設置讓我們說一個用戶/ /電子郵件),它確實是登錄用戶的電子郵件ID?我們如何保證Firebase用戶保存的電子郵件確實是他自己的電子郵件?

我們正在構建一個Firebase應用程序,其中服務的某些方面通過電子郵件通知提供。我們不想將電子郵件發送給錯誤的用戶。似乎沒有辦法保證寫入用戶的電子郵件信息//電子郵件路徑確實與用於登錄的電子郵件相同(直接或通過谷歌或Facebook等)

在我看來,如果auth (規則)除auth.uid之外還有一個auth.email字段,它可以解決問題,可以編寫規則來處理用例。

+1

爲什麼你想要?我的Google帳戶報告的電子郵件地址與我更喜歡接收電子郵件的地址不同。只要您通過發送電子郵件給確認鏈接來驗證地址的所有權,那麼確切地址就不重要了。 –

+0

原因是,如果我們爲電子郵件提供服務,並且存在不一致性,那麼它將成爲未來的安全風險。惡意用戶可能會欺騙其他人的電子郵件,並可能利用服務/信用等。 – kvs

回答

9

最新版本的Firebase身份驗證支持電子郵件驗證。

如果身份提供者(電子郵件+密碼,谷歌)支持可選的電子郵件地址驗證,該信息在API中,並在安全規則可用。(**)

例如,JavaScript API has an emailVerified property你可以在你的代碼檢查:

firebase.auth().currentUser.emailVerified 

真正

在可以同時訪問的安全規則電子郵件地址以及是否驗證,這使得一些很好的使用案例成爲可能。有了這些規則,例如只有通過身份驗證,驗證的Gmail用戶可以寫自己的個人資料:

{ 
    "rules": { 
    ".read": "auth != null", 
    "gmailUsers": { 
     "$uid": { 
     ".write": "auth.token.email_verified == true && 
        auth.token.email.matches(/.*@gmail.com$/)" 
     } 
    } 
    } 
} 

(**)這適用於谷歌登錄和電子郵件+密碼是肯定的。據我所知,Facebook只會在電子郵件地址被驗證的情況下公開,所以你可以依靠它。

+3

我在安全規則的任何文檔中找不到auth.token。你能發表一個鏈接嗎?這似乎可以工作。 – kvs

+2

這個解決方案似乎工作。謝謝你的幫助。 – kvs

相關問題