Моя проблема с использованием 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);
}