กฎ Firebase ป้องกันตัวนับการเพิ่มอัตโนมัติหรือไม่

ฉันมีตัวนับใน firebase ของฉันเพื่อนับจำนวนไลค์ในแต่ละโพสต์

var databaseRef = firebase.database().ref('/posts/').child(pid).child('likes');
            databaseRef.transaction(function(count) {

ดังนั้นสิ่งนี้จะเพิ่ม +1 ในแต่ละไลค์ในโพสต์/ไลค์ หลังจากที่ฉันแทรกมันในไลค์/postid/userid json เพื่อนับยอดไลค์

ฉันตั้งกฎไว้เพื่ออนุญาตให้นับ +1 ไลค์ต่อครั้ง:

   "likes": {
     ".write": "newData.isNumber() && 
     ((!data.exists() && newData.val() === 1) || newData.val() === data.val()+1)"
   },

มันหลีกเลี่ยงไม่ให้ใครใส่ 1,000 ไลค์ในโพสต์พร้อมกัน แต่ไม่ได้ปกป้องใครบางคนให้เรียกใช้สคริปต์โดยใส่ +1 ไลค์ทุกวินาที... มีวิธีแก้ไขสำหรับเรื่องนี้ไหม จะป้องกันตัวนับในกฎ firebase ได้อย่างไร


comment
ดูคำตอบของฉันที่นี่: stackoverflow.com/questions/37954217/   -  person Frank van Puffelen    schedule 07.05.2020
comment
ถูกต้องหรือไม่ที่จะสรุปว่าปัญหาของคุณคือคุณกลัวผู้ใช้จะกดถูกใจโพสต์เดียวกันหลายครั้งโดยส่งคำขอพร้อมกัน?   -  person EdwinS95    schedule 07.05.2020


คำตอบ (1)


หากคุณดำเนินการเพิ่มโหนดตัวนับจากส่วนหน้า คุณจะต้องกำหนดสิทธิ์การเข้าถึงการเขียนให้กับผู้ใช้ ไม่มีทางที่จะหลีกเลี่ยงผู้ใช้ที่เป็นอันตรายเพื่อเพิ่มจำนวนได้

ทางออกหนึ่งคือการใช้การอัปเดตตัวนับในฟังก์ชันคลาวด์ ฟังก์ชันคลาวด์ดำเนินการในแบ็กเอนด์และข้ามกฎความปลอดภัยทั้งหมด (เนื่องจากฟังก์ชันเหล่านี้ทำงานในแบ็กเอนด์ จึงถือเป็น "สภาพแวดล้อมที่ได้รับสิทธิพิเศษ") ดังนั้นคุณจึงสามารถปฏิเสธการเข้าถึงการเขียนไปยังโหนดตัวนับได้

คุณควรใช้ฟังก์ชันคลาวด์ซึ่งจะถูกทริกเกอร์เมื่อมีการอัปเดต post ดูที่ https://firebase.google.com/docs/functions/database-events

person Renaud Tarnec    schedule 07.05.2020
comment
โอ้ ขอบคุณสำหรับคำตอบของคุณ ฉันจะลองใช้ฟังก์ชั่นคลาวด์ ขอบคุณ! - person RGS; 07.05.2020