Je travaille sur un système J'aime/Je n'aime pas sur Laravel/VueJS.
Mon système fonctionne, mais je veux éviter les spammeurs.
Bouton J'aime :
<a v-on:click="like(10, $event)"> <i class="fas fa-heart"></i> </a>
10 est l'identifiant du message, il est généré dans Laravel Blade...
Voici comment j'essaie d'éviter les spammeurs :
const app = new Vue({ el: '#app', data() { return { allowed: true, }; }, methods: { like: function (id, event) { if (this.allowed) { axios.post('/posts/' + id + '/like', { post_id: id, }) .then((response) => { this.allowed = false; //Set allowed to false, to avoid spammers. ..... code which changes fa-heart, changes class names, texts etc .... // send notification to user Vue.toasted.show('Bla bla bla successfuly liked post', { duration: 2000, onComplete: (function () { this.allowed = true //After notification ended, user gets permission to like/dislike again. }) });
Mais il manque quelque chose ici, ou je fais quelque chose de mal. Lorsque je clique très très rapidement sur une icône similaire et que je vérifie les requêtes, axios envoie 3-4-5 requêtes (selon la vitesse à laquelle vous cliquez)
Seulement après 3 à 5 demandes data.allowed
才会变成 false
. Pourquoi? Je veux :
this.allowed = false;
continuera à être appelé jusqu'à la fin de l'appel API, vous permettant d'envoyer plus de spam pendant cette période. Vérifiezif(this.allowed)
后立即将其设置为false
.