Rumah > Artikel > rangka kerja php > Artikel yang menerangkan secara terperinci cara menggunakan perisian tengah pendikit dalam laravel8
Artikel ini akan memberi anda pengetahuan yang berkaitan tentang Laravel dan perisian tengah pendikit Kandungan utama adalah untuk mengajar anda cara menggunakan perisian tengah pendikit dalam laravel8.
pengenalan perisian tengah pendikit
Had kekerapan sering digunakan dalam API untuk Hadkan kekerapan permintaan kepada API tertentu oleh peminta bebas. Setiap API memilih jangka masa had frekuensinya sendiri, GitHub memilih 1 jam dan perisian tengah Laravel memilih 1 minit.
Contohnya: pendikit:60,1, yang menetapkan had kekerapan kepada 60 kali seminit Jika IP melebihi had ini dalam masa satu minit, pelayan akan mengembalikan respons 429 Terlalu Banyak. [Pembelajaran yang disyorkan: tutorial video laravel]
Menggunakan perisian tengah pendikit dalam laravel8
Kami biasanya menggunakan perisian pertengahan pendikit di sini. Buat had kadar dengan tertentu syarat, sebagai contoh, mengehadkan bilangan akses seminit untuk IP yang tiada dalam senarai putih IP. Berbanding sebelum ini, perisian tengah pendikit dalam laravel8 mempunyai kaedah penggunaan yang lebih mudah.
Pertama sekali, kita dapat melihat bahawa terdapat definisi sedemikian dalam fail Kernel.php
/** * The application's route middleware groups. * * @var array<string, array<int, class-string|string>> */ protected $middlewareGroups = [ 'web' => [ \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, ], 'api' => [ // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], ]; /** * The application's route middleware. * * These middleware may be assigned to groups or used individually. * * @var array<string, class-string|string> */ protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, ];
Jelas sekali bahawa 'throttle' ditakrifkan dalam laravel8 => IlluminateRoutingMiddlewareThrottleRequests:: class, Rangka kerja telah ditakrifkan, dan throttle:api digunakan dalam api.
Sudah tentu, penggunaan umum mungkin untuk mengulas throttle:api di sini, mencipta middleware pendikit baharu atau terus menggunakan throttle:60,1 dalam penghalaan.
Bagaimana jika saya perlu membuat beberapa pertimbangan yang rumit Contohnya, saya mempunyai banyak senarai putih IP yang ingin saya kecualikan tanpa had kadar, atau bagaimana jika terdapat pengguna VVVIP yang tidak mengehadkan kadar?
Pada masa ini, kita boleh mencari fail AppProvidersRouteServiceProvider.php dalam laravel8 Di bahagian bawah fail kita boleh melihat tulisan ini
/** * Configure the rate limiters for the application. * * @return void */ protected function configureRateLimiting() { RateLimiter::for('api', function (Request $request) { return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip()); }); }
Api yang ditakrifkan di sini ialah di atas dalam Kernel. .php Pendikit:api yang digunakan dalam fail. Di sini, kami boleh menetapkan syarat pengehad kadar tersuai, contohnya, mengehadkan akses IP di luar senarai putih IP pengguna kepada 60 kali sejam dan senarai putih boleh mengakses 1,000 kali setiap kali
RateLimiter::for('apiHour', function (Request $request) { if(!in_array($request->ip(), config('ip.whitelist'))){ return Limit::perHour(60)->by($request->ip()); }else{ return Limit::perHour(1000)->by($request->ip()); } });
Sudah tentu, jangan' t lupa untuk mencipta fail ip.php baharu dalam folder konfigurasi
return [ 'whitelist' => [ '192.168.0.1', ], ];
:heart: Peringatan hangat: Apabila menggunakan penghalaan antara muka api, jika anda ingin menggunakan pendikit tersuai:apiHour Jangan lupa untuk komen keluar throttle:api dalam Kernel.php asal!
Akhirnya kami dengan senang hati boleh menggunakan middleware kawalan kadar tersuai dalam penghalaan
Route::group([ 'middleware' => ['throttle:apiHour'] ], function ($router) { Route::get('user', function (Request $request) { return $request->user(); }); });
Di atas adalah ringkasan saya tentang masalah menggunakan penilai pendikit tersuai dalam laravel8, seperti Jika anda mempunyai sebarang pertanyaan, anda boleh membetulkannya pada bila-bila masa. Terima kasih kerana menonton!
Artikel ini dicetak semula, alamat asal: https://learnku.com/articles/73728
Atas ialah kandungan terperinci Artikel yang menerangkan secara terperinci cara menggunakan perisian tengah pendikit dalam laravel8. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!