Уроки курса
1 Основы синтаксиса PHP 8
60 мин
2 Функции и управляющие конструкции
60 мин
3 Объектно-ориентированное программирование на PHP
60 мин
4 Наследование, интерфейсы и полиморфизм
60 мин
5 Основы баз данных MySQL и работа через PDO
60 мин
6 Архитектурный паттерн MVC
60 мин
7 Введение в Laravel и настройка окружения
60 мин
8 Маршрутизация и контроллеры в Laravel
60 мин
9 Шаблонизатор Blade и создание интерфейса
60 мин
10 Миграции баз данных и Eloquent ORM
60 мин
11 Связи моделей в Eloquent — Настройка связей 'один …
60 мин
12 Аутентификация и защита маршрутов
60 мин
13 Разработка каталога товаров и категорий
60 мин
14 Реализация корзины покупок через сессии
60 мин
15 Оформление заказа и транзакции базы данных
60 мин
16 Интеграция платежной системы Stripe
60 мин
17 Интеграция платежной системы Vipps
60 мин
18 Разработка панели администратора
60 мин
19 Оптимизация и подготовка к production
60 мин
20 Деплой Laravel-приложения на сервер
60 мин
21 Основы PHP 8: Синтаксис, переменные и управляющие конструкции
60 мин
22 Функции и массивы в PHP 8
60 мин
23 Объектно-ориентированное программирование: Классы и объекты
60 мин
24 Продвинутое ООП: Наследование, интерфейсы и полиморфизм
60 мин
25 Основы баз данных: Проектирование БД и работа с …
60 мин
26 Взаимодействие PHP с MySQL через PDO
60 мин
27 Архитектура MVC и введение в фреймворк Laravel
60 мин
28 Маршрутизация и контроллеры в Laravel
60 мин
29 Шаблонизатор Blade: Создание пользовательского интерфейса
60 мин
30 Миграции и Eloquent ORM: Создание таблиц товаров
60 мин
31 Связи в Eloquent ORM: Отношения между моделями
60 мин
32 Аутентификация и авторизация пользователей
60 мин
33 Разработка каталога товаров: Вывод, фильтрация и пагинация
60 мин
34 Реализация корзины покупок с использованием сессий
60 мин
35 Оформление заказа: Работа с формами и валидация
60 мин
36 Транзакции базы данных: Сохранение заказа
60 мин
37 Интеграция платежной системы Stripe
60 мин
38 Интеграция платежной системы Vipps
60 мин
39 Создание панели администратора
60 мин
40 Подготовка к production и деплой приложения
60 мин
41 Основы PHP 8 и синтаксис
60 мин
42 Объектно-ориентированное программирование на PHP
60 мин
43 Продвинутое ООП и интерфейсы
60 мин
44 Основы баз данных и MySQL
60 мин
45 Архитектурный паттерн MVC
60 мин
46 Введение в Laravel и маршрутизация
60 мин
47 Шаблонизатор Blade и верстка интерфейса
60 мин
48 Миграции и структура базы данных
60 мин
49 Eloquent ORM и модели
60 мин
50 Отношения в Eloquent ORM
60 мин
51 Авторизация и защита маршрутов
60 мин
52 Создание каталога товаров
60 мин
53 Реализация корзины покупок
60 мин
54 Оформление заказа и транзакции БД
60 мин
55 Интеграция платежной системы Stripe
60 мин
56 Интеграция платежной системы Vipps
60 мин
57 Панель администратора: управление товарами
60 мин
58 Панель администратора: управление заказами
60 мин
59 Подготовка к production и деплой
60 мин
60 Запуск и тестирование готового интернет-магазина
60 мин

Аутентификация и авторизация пользователей

Студент внедрит систему регистрации и входа на сайт, а также научится защищать приватные маршруты с помощью middleware 'auth'.

Прогресс урока: 0%

Основы безопасности: Аутентификация против Авторизации

Прежде чем писать код, давайте разберемся в терминах, которые часто путают новички. Аутентификация (Authentication) — это процесс проверки того, КЕМ является пользователь. Проще говоря, это форма логина и пароля. Система проверяет, есть ли такой email в базе и совпадает ли хэш пароля. Авторизация (Authorization) — это проверка того, ЧТО разрешено делать этому пользователю. Например, обычный покупатель может просматривать свои заказы, но не может добавлять новые товары в каталог (это прерогатива администратора).

Laravel предоставляет мощные встроенные инструменты для решения обеих задач. Существуют готовые пакеты, такие как Laravel Breeze или Jetstream, которые генерируют весь код за секунды. Однако, следуя методологии Direct Instruction, мы создадим базовую систему вручную, чтобы вы понимали жизненный цикл запроса и работу сессий под капотом. Мы будем использовать фасад Auth и встроенный Middleware.

Регистрация пользователя и хэширование паролей

Процесс регистрации состоит из двух этапов: отображение формы (GET-запрос) и обработка данных (POST-запрос). Когда пользователь отправляет данные, первое правило веб-разработки — никогда не доверяйте пользовательскому вводу. Мы обязаны валидировать данные. Второе правило — никогда не храните пароли в открытом виде. Laravel использует алгоритм Bcrypt для хэширования паролей по умолчанию. Хэширование — это необратимый процесс; из хэша нельзя получить исходный пароль. При логине система просто хэширует введенный пароль и сравнивает два хэша.

После успешного создания записи в таблице users, хорошей практикой является автоматический вход пользователя в систему, чтобы ему не пришлось вводить данные заново. Для этого используется метод Auth::login($user).

php
use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;

public function register(Request $request) {
    // 1. Строгая валидация данных
    $validated = $request->validate([
        'name' => 'required|string|max:255',
        'email' => 'required|string|email|max:255|unique:users',
        'password' => 'required|string|min:8|confirmed',
    ]);

    // 2. Создание пользователя с хэшированием пароля
    $user = User::create([
        'name' => $validated['name'],
        'email' => $validated['email'],
        'password' => Hash::make($validated['password']),
    ]);

    // 3. Автоматическая аутентификация
    Auth::login($user);

    return redirect()->route('profile')->with('success', 'Регистрация успешна!');
}

Защита маршрутов с помощью Middleware

Теперь, когда пользователь может войти в систему, нам нужно защитить определенные страницы от неавторизованных гостей. Например, страница профиля или страница оформления заказа (checkout) должны быть доступны только залогиненным клиентам. В Laravel для фильтрации HTTP-запросов используется слой, называемый Middleware (Посредник).

Как указано в наших архивных материалах, для защиты маршрутов мы используем встроенный middleware с именем auth. Если гость попытается зайти на защищенный маршрут, middleware перехватит запрос до того, как он попадет в контроллер, и автоматически перенаправит пользователя на страницу логина (маршрут с именем 'login'). Это элегантное решение, позволяющее не писать проверки if (!Auth::check()) в каждом методе контроллера.

php
// routes/web.php
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\CheckoutController;

// Группировка маршрутов, защищенных middleware 'auth'
Route::middleware('auth')->group(function () {
    Route::get('/profile', [ProfileController::class, 'index'])->name('profile');
    Route::get('/checkout', [CheckoutController::class, 'index'])->name('checkout');
    Route::post('/checkout', [CheckoutController::class, 'process']);
});

Что произойдет, если неавторизованный пользователь (гость) попытается перейти по маршруту /checkout, который защищен middleware 'auth'?