📖 Scenario: You are building a Laravel web application that has a special admin section. You want to make sure only authenticated users can access the admin routes.
🎯 Goal: Create a route middleware that checks if a user is authenticated before allowing access to the admin routes.
📋 What You'll Learn
Create a middleware class named CheckAuthenticated
Register the middleware in the HTTP kernel with the key auth.check
Apply the auth.check middleware to the /admin/dashboard route
Ensure the middleware redirects unauthenticated users to the /login page
💡 Why This Matters
🌍 Real World
Middleware is used in Laravel apps to control access and modify requests before they reach your routes or controllers.
💼 Career
Understanding middleware is essential for Laravel developers to implement security, logging, and request filtering in real projects.
Progress0 / 4 steps
1
Create the middleware class
Create a middleware class named CheckAuthenticated inside the app/Http/Middleware directory. The class should have a handle method that accepts $request, Closure $next, and returns $next($request).
Laravel
Hint
Middleware classes go in app/Http/Middleware. The handle method is required and must return $next($request) to continue the request.
2
Add authentication check in middleware
Inside the handle method of CheckAuthenticated, add a condition to check if the user is not authenticated using auth()->check(). If not authenticated, redirect to /login. Otherwise, continue the request with $next($request).
Laravel
Hint
Use auth()->check() to verify if the user is logged in. Redirect unauthenticated users to /login.
3
Register the middleware in HTTP kernel
Open app/Http/Kernel.php and add the middleware class \App\Http\Middleware\CheckAuthenticated::class to the $routeMiddleware array with the key 'auth.check'.
Laravel
Hint
Register your middleware in the $routeMiddleware array in Kernel.php so you can use it in routes.
4
Apply middleware to admin route
In routes/web.php, create a route for /admin/dashboard that returns the string 'Admin Dashboard'. Apply the middleware 'auth.check' to this route using the middleware method.
Laravel
Hint
Use Route::get() to define the route and chain ->middleware('auth.check') to apply your middleware.
Practice
(1/5)
1. What is the main purpose of route middleware in Laravel?
easy
A. To run code before or after a route handles a request
B. To define database relationships
C. To create views for the application
D. To manage session storage
Solution
Step 1: Understand middleware role
Middleware runs code before or after a route processes a request to add extra logic.
Step 2: Compare with other options
Database relationships, views, and session storage are unrelated to middleware's main role.
Final Answer:
To run code before or after a route handles a request -> Option A
Quick Check:
Middleware = Pre/Post route code [OK]
Hint: Middleware runs code around route handling [OK]
Common Mistakes:
Confusing middleware with database or view logic
Thinking middleware manages sessions directly
Assuming middleware creates HTML views
2. Which of the following is the correct way to apply middleware named auth to a route in Laravel?
easy
A. Route::get('/dashboard', function () {})->middleware('auth');
B. Route::get('/dashboard', function () {}, 'auth');
C. Route::get('/dashboard', function () {})->useMiddleware('auth');
D. Route::get('/dashboard', function () {})->apply('auth');
Solution
Step 1: Recall middleware syntax for routes
Laravel uses ->middleware('name') to assign middleware to a route.
Step 2: Check syntax
Only Route::get('/dashboard', function () {})->middleware('auth'); uses the correct method. Others use non-existent methods like apply() and useMiddleware() or pass invalid extra arguments.
Final Answer:
Route::get('/dashboard', function () {})->middleware('auth'); -> Option A
Quick Check:
Correct middleware method = middleware() [OK]
Hint: Use ->middleware('name') after route definition [OK]
Common Mistakes:
Using non-existent methods like useMiddleware or apply
Placing middleware before route method incorrectly
Forgetting to pass middleware name as string
3. Given the route group below, what middleware will be applied to the /profile route?
Middleware array passed to middleware() applies all listed middleware to routes inside the group.
Step 2: Check the group middleware list
The group uses ['auth', 'verified'], so both middleware run on /profile route.
Final Answer:
Both 'auth' and 'verified' middleware -> Option D
Quick Check:
Group middleware = all listed middleware [OK]
Hint: Middleware array applies all listed middleware [OK]
Common Mistakes:
Assuming only first middleware applies
Thinking middleware arrays override each other
Ignoring middleware groups and only checking route
4. Identify the error in this middleware assignment:
Route::get('/settings', function () {
return 'Settings';
})->middleware(auth);
medium
A. Middleware cannot be applied to GET routes
B. Middleware must be registered in the controller
C. Middleware name should be a string
D. Middleware should be applied using ->useMiddleware()
Solution
Step 1: Check middleware argument type
Middleware names must be passed as strings, e.g., 'auth', not bare words.
Step 2: Verify other options
Middleware can be applied to GET routes; no need for controller registration here; useMiddleware() is invalid.
Final Answer:
Middleware name should be a string -> Option C
Quick Check:
Middleware name = string in quotes [OK]
Hint: Always quote middleware names as strings [OK]
Common Mistakes:
Passing middleware name without quotes
Thinking middleware only works on POST routes
Using non-existent middleware methods
5. You want to apply a middleware named checkAge only to routes under /admin but exclude it from /admin/login. Which is the best way to do this in Laravel?
hard
A. Apply checkAge middleware globally and remove it from /admin/login
B. Apply checkAge middleware to the group /admin and add except for /admin/login
C. Apply checkAge middleware only to /admin/login route
D. Apply checkAge middleware to all routes except /admin
Solution
Step 1: Understand middleware group usage
Applying middleware to a route group covers all routes inside it.
Step 2: Use 'except' to exclude specific routes
Laravel allows excluding routes from middleware using 'except' in middleware definition or group.
Step 3: Evaluate options
Apply checkAge middleware to the group /admin and add except for /admin/login correctly applies middleware to /admin group and excludes /admin/login. Others apply middleware incorrectly or globally.
Final Answer:
Apply checkAge middleware to the group /admin and add except for /admin/login -> Option B
Quick Check:
Group middleware + except route = correct approach [OK]
Hint: Use middleware group with except to exclude routes [OK]
Common Mistakes:
Applying middleware only to excluded route
Applying middleware globally without exclusions
Excluding entire /admin instead of just /admin/login
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.