На 8-ом уроке по изучению фреймворка Laravel мы разберем одну из важных тем в любом веб-приложении, это аутентификацию. Вы научитесь создавать систему регистрации, входа, восстановления пароля и защищать маршруты. Мы будем использовать Laravel Breeze и я покажу все шаги с примерами кода.
Установка Laravel Breeze
Laravel предлагает несколько готовых решений для аутентификации. Breeze это минималистичный стартовый набор с Blade-шаблонами. Его легко настроить, и он идеально подходит для начинающих.
Шаг 1: Установите Breeze
Откройте терминал в корне проекта и выполните:
composer require laravel/breeze --dev php artisan breeze:install npm install && npm run dev
Breeze создаст контроллеры, маршруты и шаблоны для регистрации, входа и восстановления пароля.
Шаг 2: Запустите миграции
php artisan migrate
Это создаст таблицу пользователей в базе данных. Проверьте файл database/migrations/2014_10_12_000000_create_users_table.php
, чтобы убедиться, что все поля (включая password
) присутствуют.
Регистрация, вход и восстановление пароля
После установки Breeze ваше приложение уже имеет готовые формы. Давайте разберем, как они работают.
Регистрация
Маршрут: /register
Контроллер: RegisteredUserController
Шаблон: resources/views/auth/register.blade.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
Проверка данных:
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
:
MAIL_MAILER=smtp MAIL_HOST=mailpit MAIL_PORT=1025
Для тестирования используйте Mailpit, это легкий SM-сервер.
Middleware auth и защита роутов
Middleware auth
проверяет, авторизован ли пользователь. Если нет — перенаправляет на страницу входа.
Пример защиты маршрутов
В файле routes/web.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'); });
Исключение для гостей:
Если вы хотите разрешить доступ к некоторым страницам без авторизации:
Route::get('/posts', 'PostController@index')->withoutMiddleware('auth');
Работа с текущим пользователем (Auth::user())
Через фасад Auth
вы можете получить данные текущего пользователя.
Примеры использования
В контроллере:
public function dashboard() { $user = Auth::user(); return view('dashboard', ['user' => $user]); }
В Blade-шаблоне:
<div> Привет, {{ Auth::user()->name }}! <br> Ваша почта: {{ Auth::user()->email }} </div>
Проверка авторизации:
@if (Auth::check()) <!-- Пользователь вошел в систему --> @else <!-- Гость --> @endif
Практические задачи
- Создайте защищенный маршрут
/notes
, доступный только авторизованным пользователям. - Добавьте поле
phone
в форму регистрации.- Обновите миграцию
users
. - Измените валидацию в
RegisteredUserController
.
- Обновите миграцию
- Настройте отправку письма при регистрации через событие
Registered
(см.app/Providers/EventServiceProvider.php
).
Пример добавления поля phone
:
// В миграции 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. Это основа любого приложения. В следующих урока мы разберем рассылку писем и уведомления. Если что-то не получается, пишите в комментариях, помогу.