Слава Україні!

Laravel 9. Регистрация с подтверждением

Довольно часто, при регистрации на сайте, требуется проверка электронной почты пользователя. В этой заметке описан процесс регистрации с подтверждением по e-mail.
6-го серпня 2022, 6:56

По умолчанию в Laravel процесс регистрации весьма упрощен. Пользователь вводит имя, эл. почту, пароль и попадает в закрытый раздел сайта. Однако, в большинстве случаев, необходимо проверить, что введенный адрес эл. почты указан верно и существует.

Начнем с маршрутов. При генерации аутентификации, в файл маршрутов была автоматически добавлена строка


Auth::routes();
 

Чтобы включить возможность подтверждения эл. почты по ссылке из сообщения, добавим следующий аргумент:


Auth::routes(['verify' => true]);
 

Забегая вперед, перечислю все аргументы которые может принимать эта функция:


Auth::routes([
    'login' => false,       # Отключает маршруты для входа
    'register' => false,    # Отключает маршруты для регистрации
    'verify' => true,       # Включает маршруты для подверждения эл. почты
    'reset' => false        # Отключает маршруты для сброса и восстановления пароля
]);
 

Далее, в модели User необходимо реализовать контракт (интерфейс) MustVerifyEmail


namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable implements MustVerifyEmail
{
    use Notifiable;
...
}
 

И последнее - добавить middleware 'verified' к маршрутам закрытого раздела сайта (или в сонструктор контроллера). Ниже представлены варианты:


/**
 * Добавление в конструктор контроллера
 * Create a new controller instance.
 *
 * @return void
 */
public function __construct()
{
    $this->middleware(['auth', 'verified']);
}

// Добавление к маршруту в файл routes/web.php
Route::get('/profile', function () {
    //
})->middleware(['auth', 'verified']);

// Добавление к группе маршрутов в файл routes/web.php
Route::middleware(['auth', 'verified'])->group(function () {
    Route::get('/posts', 'PostController@index')->name('posts');
    Route::get('/post/{slug}', 'PostController@show')->name('post');
});
 

Запускаем миграции


php artisan migrate

Регистрируем пользователя и видим такое уведомление

Verify Your Email Address
Before proceeding, please check your email for a verification link. If you did not receive the email,
.

А на почте будет ждать письмо со ссылкой на активацию

Laravel

Hello!

Please click the button below to verify your email address.

Verify Email Address

If you did not create an account, no further action is required.

Regards,
Laravel

If you're having trouble clicking the "Verify Email Address" button, copy and paste the URL below into your web browser: http://laravel.loc/email/verify/2/7cda7832d7be2d8b80dc0a11715766e53d625e64?expires=1659780312&signature=b15f23a73ee9600f9439700b83aa3919dc981ba1f48a42eac74695b728e15746

Чтобы изменить шаблон письма выполните команду


php artisan vendor:publish --tag=laravel-mail

Шаблон будет скопирован в папку resources/views/vendor/mail, где его можно отредактировать

Важлива інформація

Міністерство оборони
України
з 24.02 по 20.04
втрати противника
орієнтовно склали:
941100 ( +950 ) особового складу
10677 ( +1 ) танків
22271 ( +5 ) бойових бронемашин
26649 ( +49 ) артилерійських систем
1368 ( +0 ) РСЗВ
1139 ( +0 ) засоби ППО
370 ( +0 ) літаків
335 ( +0 ) гелікоптерів
45274 ( +112 ) автомобільної техніки
28 ( +0 ) кораблі / катери
3148 ( +0 ) крилаті ракети
33240 ( +64 ) БПЛА
3859 ( +1 ) спец. техніки
4 ( +0 ) установок ОТРК/ТРК
1 ( +0 ) підводні човни