как предотвратить двойную реакцию - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь предотвратить двойное голосование в firebase. Моя идея состояла в том, чтобы создать объект голосования в firebase, а затем добавлять логическое значение user_id каждый раз, когда кто-то голосует. Итак counterTips>votes>User_id1: true> UserId2: True.

Это были мои правила безопасности:

{

  "rules": {
    ".read": true,
    ".write": true,
      "CounterTips": {
     "votes": {
                "$uid": {
                    ".write": "auth.uid != null && auth.uid === $uid"
                }
              }
            }
  }


}

Так устроена моя БД

CounterTips 

 user_id: "rI9m9GEkyKhopAhaDNC8GNWPS943"

 vote: 5, 

 votes: 
1) bbz9MLo1u7T7zxugmHA806nMof93: true

Я пытаюсь вставить идентификатор текущего пользователя в объект голосования, но вместо этого просто получаю статическую строку, которая говорит user_id: true. Как мне подтолкнуть фактический идентификатор_пользователя к голосам и предотвратить повторное голосование этого пользователя в правилах безопасности?

     upvotePost(key, vote, user_id) {

if (this.state.user_id !=null )
{

CounterTipsref.child("votes/${this.state.user_id}").once("value",snapshot => {
    if (snapshot.exists()){
      const userData = snapshot.val();
      console.log("exists!", userData);
    }


});
}

 else{
alert(this.state.user_id);
let user_id= this.state.user_id;
let votes = { [user_id]: true};

vote++;
CounterTipsRef.child(key).update({ 'vote': vote, 'votes': votes }); 
}
}
if (this.state.user_id==null) {

this.props.history.push('/login');
}


  }
}

1 Ответ

0 голосов
/ 07 сентября 2018

Ваша проблема в том, что вы используете эту запись:

let votes = { user_id: true};

Здесь user_id отображается как имя свойства, а не как переменная , содержащая Наименование имущества.Быстрое решение заключается в использовании [] обозначения:

let votes = { };
votes[user_id] = true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...