Реактивная Firebase, реализующая подобную функцию - PullRequest
1 голос
/ 22 марта 2020

Моя проблема с использованием Firebase с React заключается в том, что я не знаю, как реализовать что-то, что не дает пользователю голосовать дважды, или в моем случае нажимаю кнопку «Нравится» более одного раза.

Код реакции

  const increment = firestore.FieldValue.increment(1);

  const likeButton = () => {

    firestore
    .collection('posts')
    .doc(slug)
    .update({ 
      likes: increment 
    })
    .then(() => {
      firestore
      .collection('users')
      .doc(auth.uid)
      .collection('likes')
      .doc(post.slug)
      .set({ liked: true })
    })
  }

Правила Firebase


    match /posts/{post} {
      allow read;
      allow write: 
        if isSignedIn()
        && request.resource.data.title is string 
        && request.resource.data.title.size() >= 5 
        && request.resource.data.title.size() < 150 
        && request.resource.data.body is string
        && request.resource.data.coverImageURL != null;
      allow update: if isSignedIn()
        && exists(/databases/$(database)/documents/users/$(request.auth.uid)/likes/$(post)).data.liked == false
        && (request.resource.data.likes == 1 || request.resource.data.likes == request.resource.data.likes + 1);
    }

    match /users/{userId}/likes/{post} {
        allow update: if ifOwner(userId);
        allow write: if ifOwner(userId);
    }

...