Authentication guards help control who can access parts of your Laravel app. They check if a user is logged in and allowed to see certain pages.
You want to protect admin pages so only admins can see them.
You need to allow users to log in with different methods, like web or API tokens.
You want to restrict access to certain routes based on user roles.
You want to keep guests from accessing user-only content.
You want to customize how users are authenticated in your app.
Syntax
Laravel
// Define guard in config/auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
],
// Use guard in routes or controllers
Route::middleware('auth:web')->group(function () {
// Protected routes for web guard
});
// Check guard in code
if (Auth::guard('api')->check()) {
// User is authenticated with api guard
}
Guards define how users are authenticated for each request.
Each guard uses a driver like 'session' or 'token' and a user provider.
Examples
This checks if a user is logged in using the default 'web' guard.
Laravel
// Using default web guard
if (Auth::check()) {
// User is logged in
}
This checks if a user is authenticated using the 'api' guard.
Laravel
// Using api guard
if (Auth::guard('api')->check()) {
// User is logged in via API token
}
This protects routes so only users authenticated by the 'admin' guard can access.
Laravel
// Protect routes with guard middleware
Route::middleware('auth:admin')->group(function () {
// Routes only accessible by admin guard
});
Sample Program
This route checks if the user is logged in with the 'web' guard. If yes, it shows a welcome message. If not, it redirects to login.
Laravel
<?php
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;
// In routes/web.php
Route::get('/dashboard', function () {
if (Auth::guard('web')->check()) {
return'Welcome to your dashboard!';
}
return redirect('/login');
});
OutputSuccess
Important Notes
Always define guards in config/auth.php before using them.
Use middleware auth:guardname to protect routes easily.
Guards can use different drivers like session, token, or custom drivers.
Summary
Authentication guards control how users log in and access your app.
Use guards to protect routes and check user login status.
Define guards in config and use them with middleware or code checks.
Practice
(1/5)
1. What is the main purpose of an authentication guard in Laravel?
easy
A. To manage session timeouts
B. To store user passwords securely
C. To define database connections
D. To control how users are authenticated for each request
Solution
Step 1: Understand the role of authentication guards
Guards determine how users are authenticated on each request, like checking credentials or tokens.
Step 2: Differentiate guards from other features
Guards do not store passwords, manage sessions, or define databases; those are handled elsewhere.
Final Answer:
To control how users are authenticated for each request -> Option D
Quick Check:
Authentication guard = controls user authentication [OK]
Hint: Guards decide how users log in and access app [OK]
Common Mistakes:
Confusing guards with password storage
Thinking guards manage database connections
Assuming guards handle session timeouts
2. Which of the following is the correct way to specify a guard in Laravel's auth.php config file?
What will be the output if no admin user is logged in but a regular user is?
medium
A. No admin logged in
B. Error: guard not found
C. Admin logged in
D. No output
Solution
Step 1: Understand what Auth::guard('admin')->check() does
This checks if a user is logged in using the 'admin' guard specifically.
Step 2: Analyze the scenario
No admin user is logged in, so check() returns false, even if a regular user is logged in under a different guard.
Final Answer:
No admin logged in -> Option A
Quick Check:
Guard check false means no user logged in for that guard [OK]
Hint: Guard check only sees users of that guard [OK]
Common Mistakes:
Assuming any logged-in user passes the guard check
Confusing guard names
Expecting error if guard exists
4. Identify the error in this Laravel guard usage:
Auth::guard('web')->login($user);
if (Auth::check()) {
return 'User logged in';
}
medium
A. No error, code works correctly
B. Auth::check() does not check the 'web' guard by default
C. Missing middleware to protect the route
D. Auth::guard('web')->login() requires a user ID, not a user object
Solution
Step 1: Understand Auth::guard('web')->login()
This logs in the user using the 'web' guard explicitly.
Step 2: Check what Auth::check() does
Auth::check() uses the default guard, which may not be 'web', so it might not detect the login.
Final Answer:
Auth::check() does not check the 'web' guard by default -> Option B
Quick Check:
Auth::check() uses default guard, not necessarily 'web' [OK]
Hint: Auth::check() uses default guard, not specified guard [OK]
Common Mistakes:
Assuming Auth::check() checks all guards
Thinking login() needs user ID only
Ignoring middleware importance
5. You want to protect an admin route so only users authenticated with the 'admin' guard can access it. Which is the correct way to apply this in Laravel's route definition?
hard
A. Route::middleware('auth:admin')->group(function () { Route::get('/admin', fn() => 'Admin area'); });
B. Route::middleware('auth:web')->group(function () { Route::get('/admin', fn() => 'Admin area'); });
C. Route::middleware('guest:admin')->group(function () { Route::get('/admin', fn() => 'Admin area'); });
D. Route::middleware('auth')->group(function () { Route::get('/admin', fn() => 'Admin area'); });
Solution
Step 1: Understand middleware usage for guards
The 'auth' middleware accepts a guard name to specify which guard to check for authentication.
Step 2: Choose the middleware that checks 'admin' guard
'auth:admin' ensures only users authenticated with 'admin' guard access the route.
Step 3: Eliminate incorrect options
'auth:web' checks the wrong guard, 'guest:admin' checks for unauthenticated users, and 'auth' without guard uses default guard.