Maison  >  Article  >  cadre php  >  Un article expliquant en détail comment utiliser le middleware throttle dans laravel8

Un article expliquant en détail comment utiliser le middleware throttle dans laravel8

藏色散人
藏色散人avant
2022-12-05 15:36:432601parcourir

Cet article vous donnera des connaissances pertinentes sur Laravel et le middleware throttle. Le contenu principal est de vous apprendre à utiliser le middleware throttle dans laravel8. Jetons un coup d'œil ensemble. J'espère que cela vous sera utile !

middleware d'accélérateur de restriction d'accès laravle8

introduction du middleware d'accélérateur

Les limites de fréquence sont souvent utilisées dans les API pour limiter la fréquence des demandes d'API spécifiques par des demandeurs indépendants. Chaque API choisit sa propre période de limite de fréquence, GitHub choisit 1 heure et le middleware Laravel choisit 1 minute.

Par exemple : throttle:60,1, c'est-à-dire définir la limite de fréquence à 60 fois par minute. Si une adresse IP dépasse cette limite en une minute, le serveur renverra une réponse de 429 tentatives de trop. [Apprentissage recommandé : tutoriel vidéo laravel]

Utilisation du middleware de limitation dans laravel8

Nous utilisons généralement le middleware de limitation ici pour limiter le taux d'une certaine condition, comme ne pas figurer dans la liste blanche IP. L'IP limite le nombre de temps d'accès. par minute. Par rapport à avant, le middleware de limitation de laravel8 a une méthode d'utilisation plus simple.

Tout d'abord, nous pouvons voir qu'il existe une telle définition dans le fichier Kernel.php

    /**
     * The application's route middleware groups.
     *
     * @var array<string, array<int, class-string|string>>
     */
    protected $middlewareGroups = [
        &#39;web&#39; => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
        &#39;api&#39; => [
            // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
            &#39;throttle:api&#39;,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];
    /**
     * The application&#39;s route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array<string, class-string|string>
     */
    protected $routeMiddleware = [
        &#39;auth&#39; => \App\Http\Middleware\Authenticate::class,
        &#39;auth.basic&#39; => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        &#39;cache.headers&#39; => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        &#39;can&#39; => \Illuminate\Auth\Middleware\Authorize::class,
        &#39;guest&#39; => \App\Http\Middleware\RedirectIfAuthenticated::class,
        &#39;password.confirm&#39; => \Illuminate\Auth\Middleware\RequirePassword::class,
        &#39;signed&#39; => \Illuminate\Routing\Middleware\ValidateSignature::class,
        &#39;throttle&#39; => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        &#39;verified&#39; => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    ];

Il est évident que le 'throttle' défini dans laravel8 => IlluminateRoutingMiddlewareThrottleRequests::class, est déjà défini par le framework et est dans l'API, Throttle:api est utilisé.

Bien sûr, l'usage général peut être de commenter throttle:api ici, de créer un nouveau middleware throttle ou d'utiliser directement throttle:60,1 dans le routage.

Que se passe-t-il si je dois prendre des décisions complexes ? Par exemple, si j'ai de nombreuses listes blanches d'adresses IP que je souhaite exclure sans limite de débit, ou s'il y a un utilisateur VVVIP qui ne limite pas le débit ?

À ce stade, nous pouvons trouver le fichier AppProvidersRouteServiceProvider.php dans laravel8. Au bas du fichier, nous pouvons voir cette écriture

  /**
     * Configure the rate limiters for the application.
     *
     * @return void
     */
    protected function configureRateLimiting()
    {
        RateLimiter::for(&#39;api&#39;, function (Request $request) {
            return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip());
        });
    }

L'api définie ici est le throttle:api utilisé dans le fichier Kernel.php ci-dessus. Ici, nous pouvons définir des conditions de limitation de débit personnalisées, par exemple, limiter l'accès aux adresses IP en dehors de la liste blanche des adresses IP de l'utilisateur à 60 fois par heure, et la liste blanche peut accéder à 1 000 fois à chaque fois

RateLimiter::for(&#39;apiHour&#39;, function (Request $request) {
            if(!in_array($request->ip(), config(&#39;ip.whitelist&#39;))){
                return Limit::perHour(60)->by($request->ip());
            }else{
                return Limit::perHour(1000)->by($request->ip());
            }
        });

Bien sûr, n'oubliez pas de l'ajouter dans le fichier de configuration Créez un nouveau fichier ip.php dans le dossier

return [
    &#39;whitelist&#39; => [
        &#39;192.168.0.1&#39;,
    ],
];

:heart : Rappel chaleureux : lors de son utilisation, si vous utilisez le routage de l'interface API, si vous souhaitez utiliser un throttle:apiHour personnalisé, n'oubliez pas de changez le throttle:api dans le Kernel.php original Commentez-le !

Enfin, nous pouvons utiliser avec plaisir le middleware de contrôle de débit personnalisé dans le routage

Route::group([
    &#39;middleware&#39; => [&#39;throttle:apiHour&#39;]
], function ($router) {
   Route::get(&#39;user&#39;, function (Request $request) {
       return $request->user();
   });
});

Ce qui précède est mon résumé des problèmes liés à l'utilisation du throttle rater personnalisé dans laravel8. S'il y a des problèmes, vous pouvez les corriger à tout moment. Merci. tous. Les étudiants regardent !

Cet article est réimprimé, adresse originale : https://learnku.com/articles/73728

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer