Existe-t-il un moyen d'appliquer une limite de débit à un itinéraire, mais uniquement sur les réponses réussies. Par exemple, si l'utilisateur envoie une requête au point de terminaison send/code
5 fois, si toutes réussissent, l'utilisateur ne peut pas envoyer à nouveau la requête. Cependant, si 2 d’entre eux échouent (comme une erreur de validation ou un autre problème), mais que 3 réussissent, l’utilisateur doit essayer 2 fois de plus dans le délai imparti.
Je sais qu'il faut vérifier la limite de débit avant d'exécuter la demande, puis bloquer ou laisser l'utilisateur continuer. Mais existe-t-il un moyen d’appliquer ma logique ou dois-je essayer une approche différente ?
Voici le code source
}
Supposons que mon URL soit Exemple.com/test_Rate_Limit_only_success.
Dans cet exemple, lorsque l'utilisateur envoie une requête au système, l'application valide toujours la requête (si une erreur se produit, l'utilisateur enverra une requête illimitée). Avec les données valides, la partie limitation de vitesse commencera à fonctionner.
Vous devrez peut-être créer votre propre middleware, mais vous pouvez étendre la classe
ThrottleRequests
et personnaliser la façon dont vous souhaitez gérer la réponse :Puis ajoutez votre middleware à
Kernel.php
:Ensuite, utilisez-le dans des itinéraires comme le middleware d'accélérateur d'origine :
Remarque : Si vous souhaitez revenir de
RateLimiter::for
构建的自定义响应,您可能必须重写handleRequestUsingNamedLimiter
, je n'ai rien fait pour cela ici.