File tree Expand file tree Collapse file tree 5 files changed +26
-1
lines changed Expand file tree Collapse file tree 5 files changed +26
-1
lines changed Original file line number Diff line number Diff line change @@ -21,6 +21,9 @@ LOG_STACK=daily
2121LOG_DEPRECATIONS_CHANNEL=null
2222LOG_LEVEL=debug
2323
24+ # API Rate Limiting Configuration
25+ DEFAULT_API_RATE_LIMIT=60
26+
2427# Docker MySQL Configuration
2528DB_CONNECTION=mysql
2629DB_HOST=mysql
Original file line number Diff line number Diff line change 55namespace App \Providers ;
66
77use Carbon \CarbonImmutable ;
8+ use Illuminate \Cache \RateLimiting \Limit ;
89use Illuminate \Database \Eloquent \Model ;
10+ use Illuminate \Http \Request ;
911use Illuminate \Support \Facades \Date ;
1012use Illuminate \Support \Facades \DB ;
13+ use Illuminate \Support \Facades \RateLimiter ;
1114use Illuminate \Support \ServiceProvider ;
1215
1316class AppServiceProvider extends ServiceProvider
@@ -28,5 +31,16 @@ public function boot(): void
2831 Date::use (CarbonImmutable::class);
2932 Model::shouldBeStrict (! $ this ->app ->isProduction ());
3033 DB ::prohibitDestructiveCommands ($ this ->app ->isProduction ());
34+
35+ // Disable rate limiting during testing
36+ if ($ this ->app ->environment ('testing ' )) {
37+ RateLimiter::for ('api ' , fn () => Limit::none ());
38+ } else {
39+ // Rate Limiting for API routes
40+ RateLimiter::for ('api ' , function (Request $ request ) {
41+ return Limit::perMinute ((int ) config ('rate-limiting.api.default_rate_limit ' ))
42+ ->by ($ request ->user ()?->id ?: $ request ->ip ());
43+ });
44+ }
3145 }
3246}
Original file line number Diff line number Diff line change 1616 ->withMiddleware (function (Middleware $ middleware ): void {
1717 $ middleware ->alias ([
1818 'ability ' => \App \Http \Middleware \CheckTokenAbility::class,
19+ 'throttle ' => \Illuminate \Routing \Middleware \ThrottleRequests::class,
1920 ]);
2021 })
2122 ->withExceptions (function (Exceptions $ exceptions ): void {
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ return [
4+ 'api ' => [
5+ 'default_rate_limit ' => env ('DEFAULT_API_RATE_LIMIT ' , 60 ),
6+ ],
7+ ];
Original file line number Diff line number Diff line change 33use Illuminate \Http \Request ;
44use Illuminate \Support \Facades \Route ;
55
6- Route::prefix ('v1 ' )->group (function () {
6+ Route::prefix ('v1 ' )->middleware ([ ' throttle:api ' ])-> group (function () {
77 Route::get ('/ ' , function (Request $ request ) {
88 return 'Laravel Blog API V1 Root is working ' ;
99 })->name ('api.v1.status ' );
You can’t perform that action at this time.
0 commit comments