Подтверждение почты (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).
В результате после регистрации, на почту пользователя будет приходит примерно следующее письмо:
Перенаправление после подтверждения почты
Указать, какую страницу надо открывать после подтверждения почты, можно в файле 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
Поддержать автора