Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React-Firebase实现like函数_Javascript_Firebase_Google Cloud Firestore_Firebase Security - Fatal编程技术网

Javascript React-Firebase实现like函数

Javascript React-Firebase实现like函数,javascript,firebase,google-cloud-firestore,firebase-security,Javascript,Firebase,Google Cloud Firestore,Firebase Security,我在使用Firebase和React时遇到的问题是,我不知道如何实现一些功能,以防止用户两次投票,或者在我的情况下,多次单击like按钮 反应代码 const increment = firestore.FieldValue.increment(1); const likeButton = () => { firestore .collection('posts') .doc(slug) .update({ likes: incre

我在使用Firebase和React时遇到的问题是,我不知道如何实现一些功能,以防止用户两次投票,或者在我的情况下,多次单击like按钮

反应代码

  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);
    }


匹配/posts/{post}{
允许读取;
允许写入:
如果isSignedIn()
&&request.resource.data.title是字符串
&&request.resource.data.title.size()>=5
&&request.resource.data.title.size()<150
&&request.resource.data.body是字符串
&&request.resource.data.coverImageURL!=null;
允许更新:如果为isSignedIn()
&&存在(/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);
}
匹配/users/{userId}/likes/{post}{
允许更新:如果为ifOwner(userId);
允许写入:如果为ifOwner(userId);
}

您应该尝试实现一种逻辑,如果like按钮已被单击,则禁用该按钮。谢谢您的评论,但您应该知道如何做到这一点吗?我不太确定。如果like按钮已经被点击,你应该尝试实现一个逻辑来禁用它。谢谢你的评论,但是你应该知道怎么做吗?我不太确定。