Я пытаюсь предотвратить двойное голосование в 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');
}
}
}