🛡️ Аутентифікація та авторизація — основа будь-якого сучасного веб-додатку. У Laravel цей функціонал реалізований просто, гнучко та без зайвого коду.
🔐 Що таке аутентифікація?
Аутентифікація (authentication) — це перевірка, хто ви є. Наприклад, вхід користувача за логіном та паролем.
✅ Встановлення Laravel Breeze (простий старт)
composer require laravel/breeze --dev php artisan breeze:install npm install && npm run dev php artisan migrate
Breeze автоматично додає:
- маршрути для реєстрації/логіну
- контролери
- Blade-шаблони або SPA-варіанти (Inertia/Vue/React)
🔑 Використання Sanctum для API-аутентифікації
Якщо ти створюєш REST API, рекомендую використовувати Sanctum:
composer require laravel/sanctum php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider" php artisan migrate
У
app/Http/Kernel.php
додай middleware:
'api' => [ \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ],
🔄 Вхід користувача по API:
Route::post('/login', function (Request $request) { $user = \App\Models\User::where('email', $request->email)->first(); if (! $user || ! Hash::check($request->password, $user->password)) { return response()->json(['message' => 'Invalid credentials'], 401); } return response()->json([ 'token' => $user->createToken('api-token')->plainTextToken, ]); });
🔒 Захист маршрутів
Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); });
🧱 Middleware
auth
та
can
-
auth
— перевіряє, чи користувач залогінений
-
can
— перевіряє, чи має користувач дозвіл виконати дію
Route::get('/dashboard', function () { // лише для авторизованих })->middleware('auth'); Route::delete('/post/{post}', function (Post $post) { // видалити можна тільки якщо є дозвіл })->middleware('can:delete,post');
🧑⚖️ Ролі та політики доступу (Policies)
Крок 1: Створення політики
php artisan make:policy PostPolicy --model=Post
У
app/Policies/PostPolicy.php
:
public function delete(User $user, Post $post): bool { return $user->id === $post->user_id; }
Крок 2: Реєстрація політики (автоматична з Laravel 9+, або вручну):
// app/Providers/AuthServiceProvider.php protected $policies = [ \App\Models\Post::class => \App\Policies\PostPolicy::class, ];
Крок 3: Використання
can
у Blade чи контролерах
@can('delete', $post)
<form method="POST" action="{{ route('post.destroy', $post) }}">
@csrf
@method('DELETE')
<button type="submit">Видалити</button>
</form>
@endcan
Або в контролері:
public function destroy(Post $post) { $this->authorize('delete', $post); $post->delete(); return redirect()->back(); }
🧩 Поради
- Для більш гнучкої системи ролей можеш інтегрувати пакет Spatie Laravel-Permission
- Перевірку доступу можна робити і в API через
Gate
,
can
,
authorize
або через кастомні middleware
🧪 Тестування авторизації
public function test_user_cannot_delete_other_users_post() { $user1 = User::factory()->create(); $user2 = User::factory()->create(); $post = Post::factory()->create(['user_id' => $user2->id]); $this->actingAs($user1) ->delete(route('post.destroy', $post)) ->assertForbidden(); }
📌 Висновок
Laravel дає потужні інструменти для реалізації аутентифікації та авторизації:
- Breeze чи Jetstream — для швидкого старту
- Sanctum — для безпечної роботи з API
- Policies та Middleware — для гнучкого контролю доступу