What is the main purpose of middleware in Laravel?
Middleware acts like a gatekeeper that checks each request before it reaches your app. It can allow, block, or modify requests to keep your app safe and organized.
Click to reveal answer
beginner
How does middleware help with security in Laravel?
Middleware can check if a user is logged in or has permission before letting them access certain parts of the app, protecting sensitive data.
Click to reveal answer
beginner
Give an example of a common middleware filter in Laravel.
The 'auth' middleware checks if a user is authenticated. If not, it redirects them to the login page.
Click to reveal answer
intermediate
Why is middleware useful for modifying requests or responses?
Middleware can add headers, log information, or change data before the app handles it or before sending it back to the user, making the app flexible.
Click to reveal answer
intermediate
What happens if middleware blocks a request in Laravel?
The request stops and does not reach the app’s main code. Middleware can send a response like an error or redirect instead.
Click to reveal answer
What does Laravel middleware do with incoming requests?
ASends requests directly to the database
BDeletes all requests automatically
CConverts requests into emails
DFilters and processes them before reaching the app
✗ Incorrect
Middleware filters and processes requests before they reach your app's core logic.
Which middleware would you use to check if a user is logged in?
Aauth
Bcache
Ccsrf
Dthrottle
✗ Incorrect
The 'auth' middleware checks user authentication status.
What can middleware do if a request is not allowed?
AAutomatically fix the request
BIgnore the request and do nothing
CBlock the request and send a response like redirect or error
DSend the request to another server
✗ Incorrect
Middleware can block requests and respond with errors or redirects.
Middleware can modify which of the following?
ARequests and responses
BOnly requests
COnly responses
DNeither requests nor responses
✗ Incorrect
Middleware can change both incoming requests and outgoing responses.
Why is middleware important for organizing a Laravel app?
AIt replaces the need for controllers
BIt keeps checks and filters separate from main app code
CIt stores user data permanently
DIt speeds up the database queries
✗ Incorrect
Middleware separates concerns by handling checks outside the main app logic.
Explain in your own words why Laravel uses middleware to filter requests.
Think about how a security guard checks people before entering a building.
You got /5 concepts.
Describe a situation where middleware would block a request and what happens next.
Imagine trying to enter a locked room without a key.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of middleware in a Laravel application?
easy
A. To filter and check requests before they reach the app
B. To store data permanently in the database
C. To create user interface components
D. To compile CSS and JavaScript files
Solution
Step 1: Understand middleware role
Middleware acts as a gatekeeper that processes requests before they reach the main app logic.
Step 2: Identify main purpose
Its main job is to filter, check, or modify requests to protect or control access.
Final Answer:
To filter and check requests before they reach the app -> Option A
Quick Check:
Middleware filters requests = D [OK]
Hint: Middleware acts before app logic to filter requests [OK]
Common Mistakes:
Confusing middleware with database storage
Thinking middleware builds UI components
Assuming middleware compiles assets
2. Which of the following is the correct way to apply middleware to a route in Laravel?
easy
A. $router->get('/home')->middleware('auth');
B. Route::get('/home')->middleware('auth');
C. Route::get('/home')->useMiddleware('auth');
D. $router->get('/home')->use('auth');
Solution
Step 1: Recall Laravel route syntax
Laravel uses the Route facade with methods like get() and middleware() to assign middleware.
Step 2: Identify correct chaining method
The correct method to apply middleware is middleware(), not useMiddleware() or use().
Final Answer:
Route::get('/home')->middleware('auth'); -> Option B
Quick Check:
Correct middleware method = C [OK]
Hint: Use Route::get()->middleware('name') to apply middleware [OK]
Common Mistakes:
Using $router instead of Route facade
Using useMiddleware() instead of middleware()
Using use() which is not a Laravel method
3. Given this middleware that blocks requests without a 'token' header, what will happen if a request lacks the token?
public function handle($request, Closure $next) {
if (!$request->hasHeader('token')) {
return response('Unauthorized', 401);
}
return $next($request);
}
medium
A. The request is stopped with a 401 Unauthorized response
B. The request is redirected to the login page
C. The request proceeds normally to the app
D. The request causes a server error
Solution
Step 1: Analyze middleware condition
The middleware checks if the request has a 'token' header; if not, it returns a 401 response immediately.
Step 2: Understand request flow
Without the token header, the middleware stops the request and sends back 'Unauthorized' with status 401.
Final Answer:
The request is stopped with a 401 Unauthorized response -> Option A
Quick Check:
Missing token header = 401 response [OK]
Hint: Middleware returns 401 if token header missing [OK]
Common Mistakes:
Assuming request proceeds without token
Thinking it redirects instead of returning 401
Expecting a server error instead of controlled response
4. This middleware is intended to block requests without 'X-API-KEY' header. What is wrong with it?
public function handle($request, Closure $next) {
if ($request->header('X-API-KEY') == null) {
$next($request);
}
return response('Forbidden', 403);
}
medium
A. It never calls $next() for valid requests
B. It should return 401 instead of 403
C. It uses wrong header name case
D. It returns 403 even when the header exists
Solution
Step 1: Trace middleware logic
If header is null, it calls $next($request) but does not return it, so execution continues.
Step 2: Identify flow error
After calling $next(), it always returns 403 response, so even valid requests get blocked.
Final Answer:
It returns 403 even when the header exists -> Option D
Quick Check:
Missing return before $next causes wrong 403 always [OK]
Hint: Always return $next($request) to continue request [OK]
Common Mistakes:
Not returning $next() call
Misunderstanding header case sensitivity (Laravel handles case)
Confusing 401 and 403 status codes
5. You want to create middleware that only allows requests with a 'role' header set to 'admin' or 'editor'. Which code snippet correctly implements this filter?
hard
A. public function handle($request, Closure $next) {
if ($request->header('role') === 'admin' && $request->header('role') === 'editor') {
return $next($request);
}
return response('Forbidden', 403);
}
B. public function handle($request, Closure $next) {
if ($request->header('role') == 'admin' || 'editor') {
return $next($request);
}
return response('Forbidden', 403);
}
C. public function handle($request, Closure $next) {
if (in_array($request->header('role'), ['admin', 'editor'])) {
return $next($request);
}
return response('Forbidden', 403);
}
D. public function handle($request, Closure $next) {
if ($request->header('role') != 'admin' || $request->header('role') != 'editor') {
return response('Forbidden', 403);
}
return $next($request);
}
Solution
Step 1: Understand role check logic
The middleware should allow requests if the 'role' header is either 'admin' or 'editor'.
Step 2: Evaluate each option's condition
public function handle($request, Closure $next) {
if (in_array($request->header('role'), ['admin', 'editor'])) {
return $next($request);
}
return response('Forbidden', 403);
} uses in_array() correctly to check if role is in allowed list. public function handle($request, Closure $next) {
if ($request->header('role') == 'admin' || 'editor') {
return $next($request);
}
return response('Forbidden', 403);
} has incorrect condition syntax. public function handle($request, Closure $next) {
if ($request->header('role') === 'admin' && $request->header('role') === 'editor') {
return $next($request);
}
return response('Forbidden', 403);
} requires role to be both 'admin' and 'editor' simultaneously, which is impossible. public function handle($request, Closure $next) {
if ($request->header('role') != 'admin' || $request->header('role') != 'editor') {
return response('Forbidden', 403);
}
return $next($request);
} logic is inverted and will block valid roles.
Final Answer:
Uses in_array() to correctly filter 'admin' or 'editor' roles -> Option C
Quick Check:
Use in_array() for multiple allowed values [OK]
Hint: Use in_array() to check multiple allowed roles [OK]
Common Mistakes:
Using || incorrectly without full comparisons
Checking for both roles with && instead of ||
Inverting logic causing wrong blocking
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.