Подтверждение почты (email)

В Laravel по умолчанию входит возможность подтверждения пользователя по email.

Чтобы письмо с подтверждением отправлялась пользователю, надо для класса User добавить интерфейс MustVerifyEmail.

# app/User.php
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable implements MustVerifyEmail
{
    use Notifiable;
    // …
}

Подтверждение почты сохраняется в таблице «users» в поле email_verified_at. В данном поле указывается дата подтверждения почты (если поле заполнено, значит пользователь подтвердил свой email).

В результате после регистрации, на почту пользователя будет приходит примерно следующее письмо:

Laravel. Email Verification

Перенаправление после подтверждения почты

Указать, какую страницу надо открывать после подтверждения почты, можно в файле app/Http/Controllers/Auth/VerificationController.php.

# app/Http/Controllers/Auth/VerificationController.php

protected $redirectTo = '/';

Страница с подтверждением email

Чтобы стала доступна страница, в которой можно запросить ссылку на подтверждение почты, в файле routes/web.php надо добавить следующий параметр:

# routes/web.php

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

Теперь станет доступна страница /email/verify, в которой можно будет отправить письмо с подтверждением email.

Шаблон страницы подтверждения почты находится в resources/views/auth/verify.blade.php.

Шаблон письма подтверждения email

Сначала надо переопределить отправку письма с подтверждением email. Сделать это можно в файле app/Providers/AppServiceProvider.php.

# app/Providers/AppServiceProvider.php

use Illuminate\Auth\Notifications\VerifyEmail;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Support\Facades\URL;
use Carbon\Carbon;

// …

public function boot()
{
    VerifyEmail::toMailUsing(function ($notifiable) {
        
        // Генерация ссылки для подтверждения письма
        $verifyUrl = URL::temporarySignedRoute(
            'verification.verify', Carbon::now()->addMinutes(60), [
                'id' => $notifiable->getKey(),
                'hash' => sha1($notifiable->getEmailForVerification())
            ]
        );
        
        // Переменные, которые будут доступны в шаблоне письма
        $vars = [
            'url' => $verifyUrl
        ];

        return (new MailMessage)
            ->subject('Подтверждение почты') // Тема письма
            ->markdown('emails.verify', $vars); // Шаблон письма
    });
}

И создать шаблон письма в файле resources/views/emails/verify.blade.php.

<!-- resources/views/emails/verify.blade.php -->

@component('mail::message')

<p>Нажмите на кнопку ниже, чтобы подтвердить почту.</p>

@component('mail::button', ['url' => $url])
    Подтвердить почту
@endcomponent

<p>Если кнопа не работает, перейдите по ссылке {{ $url }}</p>

@endcomponent