我在爲後端和firebase的解決方案提供同樣有趣的服務,但在開始使用它之前我有一些問題。強制同時設置多個孩子
我的問題將以「驗證數據」部分中的例https://www.firebase.com/docs/security/guide/securing-data.html 爲基礎。
在這個例子中,他們創建一個小部件,一個小部件必須具有顏色和大小。他們驗證這一點與這條線: 「」 .validate 「: 」newData.hasChildren([ '色', '大小'])「,」
這條線後,會出現這種情況
// PERMISSION_DENIED: does not have children color and size
ref.set('foo');
// PERMISSION DENIED: does not have child color
ref.set({size: 22});
// PERMISSION_DENIED: size is not a number
ref.set({ size: 'foo', color: 'red' });
// SUCCESS (assuming 'blue' appears in our colors list)
ref.set({ size: 21, color: 'blue'});
而且之後,如果客戶想更新一個孩子,這會成功
// If the record already exists and has a color, this will
// succeed, otherwise it will fail since newData.hasChildren(['color', 'size'])
// will fail to validate
ref.child('size').set(99);
我的問題是:我們可以強迫客戶端始終更新在同一時間的大小和顏色。如果客戶嘗試這個「ref.child('size')。set(99);」。我想拒絕並且只接受像「ref.set({size:21,color:'blue'});」即使記錄已經存在。
然後,我希望這種情況發生在客戶端上:
ref.set({ size: 21, color: 'blue'}); //Sucess, now size and color exist
ref.child('size').set(99); //Fail, you did not update color at the same time
ref.set({ size: 22, color: 'red'}); //Success, you just change the size
//and the color. You didnt create a new
//value, you change value already there
感謝
謝謝,但是如果我理解你的anwser,你添加「!data.exists()來驗證它不存在」。然後,如果用戶嘗試更改值,則會因數據存在而失敗。但是,即使數據存在,我也希望允許客戶端更改值。 然後如果客戶端 ref.set({size:21,color:'blue'}); //成功,現在存在價值 我想要這個「ref.child('size')。set(99);」失敗,但「ref.set({size:21,color:'blue'});」將會成功。我的問題是否清楚?或者我只是不會打開催促者? – qqchose
!data.exists僅適用於不想覆蓋現有數據的情況。如果您希望能夠更改數據(即使它存在),請將其保留。我提供的答案將允許您覆蓋現有數據,只要它包含兒童的大小和顏色即可。 – Jay
然後,你的答案是「」.validate「:newData.hasChildren(['color','size'])」「但是從https://www.firebase.com/docs/security/guide/securing -data.html命令「/ /如果記錄已經存在,並有一個顏色,這將 //成功,否則它會失敗,因爲newData.hasChildren(['顏色','尺寸']) //將失敗驗證 ref.child('size')。set(99);「將會成功,那麼網站是錯誤的或者我錯過了什麼 – qqchose