2017-09-05 38 views
0

最近發現可以設置數據庫規則來驗證數據庫是否已經具有相同的數據,但目前它只是接受要插入的相同數據,但如何驗證和阻止相同的用戶名和電子郵件輸入?Firebase實時數據庫驗證用戶名和電子郵件地址

{ 
"rules": { 
     ".read": true, 
    ".write": true, 
     "username":{ 
     ".validate": "!root.child('username').child(newData.val()).exists()" 
     }, 
     "email":{ 
     ".validate": "!root.child('email').child(newData.val()).exists()" 
     } 

     } 
    } 

根子是通過電子郵件認證uid創建的,其餘的將在同一個節點下。

enter image description here

如何防止用戶輸入相同的用戶名和電子郵件?

回答

0

您的規則將驗證是否存在單個媒體資源/username並且與您正在編寫的新數據具有相同的值。您的用例看起來不同:您希望確保所有用戶都擁有唯一的用戶名。

您無法確保Firebase安全規則中多個節點的唯一值。你,而不是需要將用戶名作爲密鑰存儲在一個單獨的集合,即

usernames 
    "rexyou0831": "ik3sf...." 

以上數據結構表明用戶ik3sf...聲稱名rexyou0831。有了這樣的結構,用戶名就被保證是唯一的,因爲密鑰在定義上必須在集合中是唯一的。您可以確保用戶只能寫新名稱或刪除自己的名字:

{ 
    "rules": { 
    "usernames": { 
     "$name": { 
     ".write": "!data.exists() || newData.val() === data.val()" 
     } 
    } 
    } 
} 

要強制執行的電子郵件地址的唯一性過多,你需要創建一個類似的收集那些。

更多解釋閱讀中涉及這一同一主題前面的一個問題: