2017-07-08 39 views
0

我正在嘗試爲我的學校製作Android應用程序。我們被分配一個卷號。我希望將學生存入Firebase,同時確保沒有兩名學生擁有相同的卷號和電子郵件。我將它們存儲在類似的方式:檢查Firebase中的兩個或多個副本

{ 
    "Users": { 
    "Uid":{ 
     "data":{ 
     "Name": "", 
     "RollNumber: "", 
     "Email": "", 
     "Phone": "", 
     "Other Fields": "" 
     }, 
     "otherData": { 
     } 
    } 
    } 
} 

也許以後擴展做出一定的獨特組合一樣,沒有兩個學生可以有電話和出生日期和(只是一個例子)的相同的組合。

+0

我會建議您將RollNumber作爲用戶的UID,因爲這樣可以通過Firebase安全強制執行規則,否則不可能,而且您將依賴於客戶端查詢(不安全)或者必須設置CloudFunctions或AppEngine/Server進行檢查。另外一個查詢將會對你當前的結構非常不方便,因爲你無法深入查詢2層,所以你每次都必須下載整個用戶節點(這對於一所學校來說可能是可以通過的) – Linxy

+0

但是我也想讓Phone no 。和Uid獨特。對此有何建議? –

+0

那麼,在那個原因中,我只是unnest數據類,所以你可以查詢RollNumber或電子郵件,如果一個不是唯一的,然後檢查另一個。您必須依賴使用查詢,因爲該結構不允許檢查Firebase安全性,除非您更改/添加其他節點。 – Linxy

回答

0

爲了解決您的問題,我建議您執行Firebase authenticationGoogle Signin。通過這種方式,您可以確保電子郵件是唯一的。

要驗證唯一性的Roll Number,請使用Roll Number而不是uid,然後僅對參考使用exists()方法。如果項目中的用戶太多,我建議您創建一個名爲rollNumbers的新部分,並僅在此新部分中進行檢查。這意味着你不需要下載整個用戶節點。您只需要下載顯着小的rollNumbers節點。

以同樣的方式,你可以在其他領域實現這一點。

希望它有幫助。