Урок 8: Аутентификация в Laravel

На 8-ом уроке по изучению фреймворка Laravel мы разберем одну из важных тем в любом веб-приложении, это аутентификацию. Вы научитесь создавать систему регистрации, входа, восстановления пароля и защищать маршруты. Мы будем использовать Laravel Breeze и я покажу все шаги с примерами кода.

Установка Laravel Breeze

Laravel предлагает несколько готовых решений для аутентификации. Breeze это минималистичный стартовый набор с Blade-шаблонами. Его легко настроить, и он идеально подходит для начинающих.

Шаг 1: Установите Breeze

Откройте терминал в корне проекта и выполните:

bash
composer require laravel/breeze --dev
php artisan breeze:install
npm install && npm run dev

Breeze создаст контроллеры, маршруты и шаблоны для регистрации, входа и восстановления пароля.

Шаг 2: Запустите миграции

bash
php artisan migrate

Это создаст таблицу пользователей в базе данных. Проверьте файл database/migrations/2014_10_12_000000_create_users_table.php, чтобы убедиться, что все поля (включая password) присутствуют.

Регистрация, вход и восстановление пароля

После установки Breeze ваше приложение уже имеет готовые формы. Давайте разберем, как они работают.

Регистрация

Маршрут: /register
Контроллер: RegisteredUserController
Шаблон: resources/views/auth/register.blade.php

Пример кода из контроллера:

php
use Illuminate\Http\Request;
use App\Models\User;

public function store(Request $request) {
    $request->validate([
        'name' => 'required|string|max:255',
        'email' => 'required|string|email|max:255|unique:users',
        'password' => 'required|string|confirmed|min:8',
    ]);

    $user = User::create([
        'name' => $request->name,
        'email' => $request->email,
        'password' => Hash::make($request->password),
    ]);

    Auth::login($user);
    return redirect('/dashboard');
}

Вход

Маршрут: /login
Контроллер: AuthenticatedSessionController

Проверка данных:

php
public function store(Request $request) {
    $credentials = $request->validate([
        'email' => 'required|email',
        'password' => 'required',
    ]);

    if (Auth::attempt($credentials, $request->remember)) {
        $request->session()->regenerate();
        return redirect()->intended('/dashboard');
    }

    return back()->withErrors([
        'email' => 'Неверные данные.',
    ]);
}

Восстановление пароля

Breeze автоматически генерирует логику для сброса пароля. Чтобы настроить отправку писем, измените .env:

env
MAIL_MAILER=smtp
MAIL_HOST=mailpit
MAIL_PORT=1025

Для тестирования используйте Mailpit, это легкий SM-сервер.

Middleware auth и защита роутов

Middleware auth проверяет, авторизован ли пользователь. Если нет — перенаправляет на страницу входа.

Пример защиты маршрутов

В файле routes/web.php:

php
// Только для авторизованных
Route::get('/profile', function () {
    return view('profile');
})->middleware('auth');

// Группировка маршрутов
Route::middleware('auth')->group(function () {
    Route::get('/dashboard', 'DashboardController@index');
    Route::get('/settings', 'SettingsController@index');
});

Исключение для гостей:
Если вы хотите разрешить доступ к некоторым страницам без авторизации:

php
Route::get('/posts', 'PostController@index')->withoutMiddleware('auth');

Работа с текущим пользователем (Auth::user())

Через фасад Auth вы можете получить данные текущего пользователя.

Примеры использования

В контроллере:

php
public function dashboard() {
    $user = Auth::user();
    return view('dashboard', ['user' => $user]);
}

В Blade-шаблоне:

html
<div>
    Привет, {{ Auth::user()->name }}!
    <br>
    Ваша почта: {{ Auth::user()->email }}
</div>

Проверка авторизации:

php
@if (Auth::check())
    <!-- Пользователь вошел в систему -->
@else
    <!-- Гость -->
@endif

Практические задачи

  1. Создайте защищенный маршрут /notes, доступный только авторизованным пользователям.
  2. Добавьте поле phone в форму регистрации.
    • Обновите миграцию users.
    • Измените валидацию в RegisteredUserController.
  3. Настройте отправку письма при регистрации через событие Registered (см. app/Providers/EventServiceProvider.php).

Пример добавления поля phone:

php
// В миграции
public function up() {
    Schema::table('users', function (Blueprint $table) {
        $table->string('phone')->after('email');
    });
}

// В контроллере
$request->validate([
    'phone' => 'required|string|max:20',
]);

User::create([
    'phone' => $request->phone,
    // ... остальные поля
]);

Итоги 8-го урока

Теперь вы умеете работать с аутентификацией в Laravel. Это основа любого приложения. В следующих урока мы разберем рассылку писем и уведомления. Если что-то не получается, пишите в комментариях, помогу.

Полный курс по Laravel для начинающих