В Laravel аутентификация пользователей организована с помощью guards и providers. Понимание этих понятий важно, если вы хотите гибко управлять авторизацией, особенно при работе с API или несколькими типами пользователей.
Что такое Guard?
Guard – это механизм, который определяет как именно Laravel аутентифицирует пользователя.
- Provider отвечает за откуда берутся данные пользователя (например, таблица
users). - Guard отвечает за способ проверки данных и хранения состояния (сессия, токен и т.д.).
Проще говоря:
- Guard = как проверить пользователя.
- Provider = откуда взять пользователя.
Настройка Guards
Настройки guard’ов находятся в файле config/auth.php.
Пример стандартной конфигурации:
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
],
web– для обычного сайта (использует сессии и куки).api– для API (использует токены).
Использование Guards
Авторизация пользователя
use Illuminate\Support\Facades\Auth;
if (Auth::guard('web')->attempt(['email' => $email, 'password' => $password])) {
// Пользователь успешно авторизован
}
Проверка авторизации
if (Auth::guard('web')->check()) {
$user = Auth::guard('web')->user();
}
Логаут
Auth::guard('web')->logout();
Middleware
Можно ограничивать доступ к маршрутам по guard’у:
Route::get('/dashboard', function () {
return view('dashboard');
})->middleware('auth:web');
Несколько типов пользователей
Иногда нужно разделить авторизацию для, например, админов и обычных пользователей. Для этого создаём отдельные guards и providers.

Конфигурация auth.php:
'guards' => [
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
'user' => [
'driver' => 'session',
'provider' => 'users',
],
],
'providers' => [
'admins' => [
'driver' => 'eloquent',
'model' => App\Models\Admin::class,
],
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
],
Пример контроллера авторизации для админов:
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class AdminLoginController extends Controller
{
public function showLoginForm()
{
return view('admin.login');
}
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if (Auth::guard('admin')->attempt($credentials)) {
return redirect()->intended('/admin/dashboard');
}
return back()->withErrors(['email' => 'Неверные данные']);
}
public function logout()
{
Auth::guard('admin')->logout();
return redirect('/admin/login');
}
}
Middleware для админов:
Route::prefix('admin')->middleware('auth:admin')->group(function () {
Route::get('/dashboard', function () {
return view('admin.dashboard');
});
});
Итог
- Guard – определяет способ аутентификации пользователя.
- Provider – определяет источник данных пользователя.
- Для стандартного сайта обычно достаточно
web. - Для API или нескольких типов пользователей создаются отдельные guards.
Такой подход позволяет легко управлять авторизацией для разных частей приложения, например, для админки и фронтенда сайта.