Правила Firebase защищают счетчик автоинкремента?

У меня есть счетчик в моей firebase для подсчета лайков в каждом посте.

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

так что это добавит +1 к каждому лайку в постах/лайках после того, как я вставлю его в лайки/постид/идентификатор пользователя json. Для подсчета лайков.

Для этого я сделал правило, позволяющее считать +1 лайк за раз:

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

это позволяет избежать того, чтобы кто-то поставил 1000 лайков в посте сразу, но не защищает кого-то от запуска скрипта, вставляющего +1 лайк каждую секунду ... какое-нибудь решение для этого? как защитить счетчик в правилах firebase?


person RGS    schedule 07.05.2020    source источник
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