РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
757 of 1392 menu

Middleware verified

Middleware verified в Laravel используется для защиты маршрутов от доступа пользователей, у которых не подтверждён email-адрес. Это встроенный посредник, который проверяет, прошёл ли текущий пользователь верификацию email. Если пользователь не подтвердил свой email, он будет перенаправлен на страницу уведомления о необходимости верификации. Middleware применяется к маршрутам, которые требуют подтверждённого email для доступа. Он работает в паре с трейтом MustVerifyEmail в модели пользователя и встроенными контроллерами верификации.

Настройка модели User

Для использования middleware необходимо реализовать интерфейс MustVerifyEmail в модели пользователя:

<?php namespace AppModels; use IlluminateFoundationAuthUser as Authenticatable; use IlluminateContractsAuthMustVerifyEmail; use IlluminateNotificationsNotifiable; class User extends Authenticatable implements MustVerifyEmail { use Notifiable; protected $fillable = [ 'name', 'email', 'password', ]; protected $hidden = [ 'password', 'remember_token', ]; } ?>

Применение middleware к маршрутам

Middleware verified применяется к маршрутам в файле web.php. Его можно использовать отдельно или в комбинации с другими middleware:

<?php use IlluminateSupportFacadesRoute; use AppHttpControllersDashboardController; use AppHttpControllersProfileController; use AppHttpControllersSettingsController; Route::middleware(['auth', 'verified'])->group(function () { Route::get('/dashboard', [DashboardController::class, 'index']) ->name('dashboard'); Route::get('/profile', [ProfileController::class, 'edit']) ->name('profile.edit'); Route::get('/settings', [SettingsController::class, 'index']) ->name('settings'); }); ?>

Также можно применить middleware к отдельному маршруту:

<?php use IlluminateSupportFacadesRoute; use AppHttpControllersOrderController; Route::get('/orders', [OrderController::class, 'index']) ->middleware(['auth', 'verified']) ->name('orders.index'); ?>

Пример работы middleware

Создадим контроллер для защищённого маршрута:

<?php namespace AppHttpControllers; use IlluminateHttpRequest; class DashboardController extends Controller { public function index() { $res = 'Welcome to dashboard, your email is verified'; return view('dashboard', ['message' => $res]); } } ?>

Теперь определим маршрут с middleware:

<?php use IlluminateSupportFacadesRoute; use AppHttpControllersDashboardController; Route::get('/dashboard', [DashboardController::class, 'index']) ->middleware(['auth', 'verified']) ->name('dashboard'); ?>

Если пользователь залогинен, но не подтвердил email, при попытке перехода на /dashboard он будет перенаправлен на страницу /email/verify. Если email подтверждён, пользователь увидит содержимое защищённой страницы.

Настройка страницы верификации

Для отображения страницы уведомления о необходимости верификации используется маршрут /email/verify. В контроллере можно получить информацию о пользователе:

<?php namespace AppHttpControllers; use IlluminateHttpRequest; use IlluminateFoundationAuthEmailVerificationRequest; class VerificationController extends Controller { public function notice(Request $request) { $user = $request->user(); if ($user->hasVerifiedEmail()) { return redirect()->route('dashboard'); } $res = 'Please verify your email address'; return view('auth.verify', ['message' => $res, 'user' => $user]); } } ?>

Результат выполнения метода hasVerifiedEmail:

false

Обработка верификации в контроллере

Пример обработки подтверждения email после клика по ссылке из письма:

<?php namespace AppHttpControllers; use IlluminateHttpRequest; use IlluminateFoundationAuthEmailVerificationRequest; class VerifyEmailController extends Controller { public function __invoke(EmailVerificationRequest $request) { $request->fulfill(); $res = 'Email verified successfully'; return redirect()->route('dashboard') ->with('message', $res); } } ?>

Проверка верификации в шаблоне Blade

В шаблоне можно проверить статус верификации пользователя:

@auth @if (auth()->user()->hasVerifiedEmail()) <p>Your email is verified</p> @else <p>Please verify your email address</p> <a href="{{ route('verification.send') }}">Resend verification email</a> @endif @endauth

Результат выполнения для неподтверждённого пользователя:

"Please verify your email address"

Смотрите также

  • метод hasVerifiedEmail,
    который проверяет подтверждение email у пользователя
  • метод markEmailAsVerified,
    который помечает email как подтверждённый
  • метод auth,
    который проверяет аутентификацию пользователя
  • метод guest,
    который ограничивает доступ для гостей
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить