
Laravel Middleware Gatekeeper?
1. What is Middleware in Laravel?
You can think of middleware as a "gatekeeper" for every incoming request to your Laravel application.
Whenever a user sends a request (e.g., visiting the /dashboard page), Laravel first checks if that request should be passed on to the Controller or if it should be rejected/redirected.
So, middleware is a layer of logic that runs before (or after) a request reaches the controller.
Real-world examples of built-in Laravel middleware:
- auth → ensures the user is logged in.
- verified → ensures the user has verified their email.
- throttle → limits the number of requests (rate limiting).
2. How Does It Work?
The simple flow is: User Request → Middleware → Controller → Response
For example:
- A user tries to access /dashboard.
- The auth middleware checks: "Is the user logged in?"
- If yes → the request is passed on to the Controller.
- If no → the user is redirected to the login page.
3. How to Create Middleware
- Generate the Middleware
php artisan make:middleware CheckAge
This command creates a new file at app/Http/Middleware/CheckAge.php.
- Fill in the Middleware Logic
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; class CheckAge { public function handle(Request $request, Closure $next) { if ($request->age < 18) { return redirect('home'); // reject if age < 18 } return $next($request); // proceed to the next request (controller) } }
- Register the Middleware
Add it to app/Http/Kernel.php under the $routeMiddleware property:
protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, // ... other middleware 'check.age' => \App\Http\Middleware\CheckAge::class, ];
- Use the Middleware on a Route
Now you can apply it to any route:
Route::get('/dashboard', function () { return "Welcome to the Dashboard!"; })->middleware('check.age');
if a request is made to /dashboard with an age parameter less than 18, the user will be redirected to /home.
4. Common Middleware Uses
- Protecting Routes
Route::get('/admin', [AdminController::class, 'index'])->middleware(['auth', 'role:admin']);
→ Only users who are logged in and have the admin role can access this.
-
Filtering Requests: For example, checking if a specific API token exists in the request header.
-
Rate Limiting (Anti-Spam): The throttle:60,1 middleware allows a maximum of 60 requests per minute from a single IP.
-
Logging / Monitoring: Middleware can be used to log every incoming request for analytics or debugging.
The Bottom Line
-
Middleware is an intermediary layer between a user's request and the application's controller.
-
Its purpose is to check, filter, or manipulate the request before it's processed further.
-
The workflow is simple: create it → register it → apply it to a route or controller.