نسخه:

تایید ایمیل

معرفی

بسیاری از برنامه های کاربردی وب از کاربران می خواهند که آدرس ایمیل خود را قبل از استفاده از برنامه تأیید کنند. لاراول به جای اینکه شما را مجبور کند که این ویژگی را مجدداً با دست برای هر برنامه‌ای که ایجاد می‌کنید پیاده‌سازی کنید، خدمات داخلی مناسبی برای ارسال و تأیید درخواست‌های تأیید ایمیل ارائه می‌کند.

می خواهید سریع شروع کنید؟ یکی از کیت های شروع برنامه لاراول را در یک برنامه جدید لاراول نصب کنید. کیت های آغازین از داربست کل سیستم احراز هویت شما، از جمله پشتیبانی تایید ایمیل، مراقبت خواهند کرد.

آماده سازی مدل

قبل از شروع، بررسی کنید که App\Models\User مدل شما Illuminate\Contracts\Auth\MustVerifyEmail قرارداد را اجرا می کند:

<?php
 
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;
 
// ...
}

هنگامی که این رابط به مدل شما اضافه شد، به کاربران تازه ثبت نام شده به طور خودکار ایمیلی حاوی پیوند تأیید ایمیل ارسال می شود. این یکپارچه اتفاق می افتد زیرا لاراول به طور خودکار Illuminate\Auth\Listeners\SendEmailVerificationNotification شنونده را برای Illuminate\Auth\Events\Registered رویداد ثبت می کند.

اگر به‌جای استفاده از کیت شروع، Illuminate\Auth\Events\Registered ثبت‌نام را در برنامه خود به صورت دستی پیاده‌سازی می‌کنید، باید اطمینان حاصل کنید که پس از موفقیت ثبت نام کاربر، رویداد را ارسال می‌کنید :

use Illuminate\Auth\Events\Registered;
 
event(new Registered($user));

آماده سازی پایگاه داده

در مرحله بعد، users جدول شما باید دارای email_verified_at ستونی برای ذخیره تاریخ و زمانی باشد که آدرس ایمیل کاربر تأیید شده است. به طور معمول، این در انتقال پایگاه داده پیش فرض لاراول گنجانده شده است 0001_01_01_000000_create_users_table.php .

مسیریابی

برای اجرای صحیح تایید ایمیل، سه مسیر باید تعریف شود. ابتدا، یک مسیر برای نمایش یک اخطار به کاربر لازم است که باید روی پیوند تأیید ایمیل در ایمیل تأییدی که لاراول پس از ثبت نام برای آنها ارسال کرده است، کلیک کند.

دوم، یک مسیر برای رسیدگی به درخواست‌های ایجاد شده زمانی که کاربر روی پیوند تأیید ایمیل در ایمیل کلیک می‌کند، مورد نیاز است.

سوم، اگر کاربر به طور تصادفی اولین پیوند تأیید را از دست داد، به یک مسیر برای ارسال مجدد پیوند تأیید نیاز خواهد بود.

اعلامیه تأیید ایمیل

همانطور که قبلاً ذکر شد، باید مسیری تعریف شود که یک نمای را به کاربر باز می‌گرداند که به کاربر دستور می‌دهد پس از ثبت نام، روی پیوند تأیید ایمیلی که توسط لاراول برای او ایمیل شده است کلیک کند. این نمای زمانی برای کاربران نمایش داده می شود که آنها سعی می کنند به قسمت های دیگر برنامه دسترسی پیدا کنند بدون اینکه ابتدا آدرس ایمیل خود را تأیید کنند. به یاد داشته باشید، تا زمانی که App\Models\User مدل شما رابط را پیاده سازی کند، پیوند به طور خودکار برای کاربر ایمیل می شود MustVerifyEmail :

Route::get('/email/verify', function () {
return view('auth.verify-email');
})->middleware('auth')->name('verification.notice');

مسیری که اعلامیه تأیید ایمیل را برمی گرداند باید نامگذاری شود verification.notice . مهم است که این نام دقیقاً به مسیر اختصاص داده شود، زیرا در صورتی که کاربر آدرس ایمیل خود را تأیید نکرده باشد، verified میان افزار موجود در لاراول به طور خودکار به نام مسیر هدایت می شود.

هنگام اجرای دستی تأیید ایمیل، از شما خواسته می شود که محتوای نمای اعلان تأیید را خودتان تعریف کنید. اگر مایل به داربستی هستید که شامل تمام نماهای احراز هویت و تأیید باشد، کیت های شروع برنامه لاراول را بررسی کنید .

کنترل کننده تأیید ایمیل

در مرحله بعد، ما باید مسیری را تعریف کنیم که درخواست‌های ایجاد شده را زمانی که کاربر روی پیوند تأیید ایمیلی که برای او ایمیل شده کلیک می‌کند، رسیدگی می‌کند. این مسیر باید نامگذاری شود verification.verify و به auth و signed میان افزارها اختصاص داده شود:

use Illuminate\Foundation\Auth\EmailVerificationRequest;
 
Route::get('/email/verify/{id}/{hash}', function (EmailVerificationRequest $request) {
$request->fulfill();
 
return redirect('/home');
})->middleware(['auth', 'signed'])->name('verification.verify');

قبل از حرکت، اجازه دهید نگاهی دقیق تر به این مسیر بیندازیم. ابتدا، متوجه خواهید شد که ما از یک EmailVerificationRequest نوع درخواست به جای Illuminate\Http\Request نمونه معمولی استفاده می کنیم. این EmailVerificationRequest یک فرم درخواست است که با لاراول گنجانده شده است. این درخواست به طور خودکار از اعتبارسنجی درخواست ها id و hash پارامترها مراقبت می کند.

در مرحله بعد، می توانیم مستقیماً به فراخوانی fulfill متد در درخواست ادامه دهیم. این متد markEmailAsVerified متد را روی کاربر احراز هویت شده فراخوانی می کند و Illuminate\Auth\Events\Verified رویداد را ارسال می کند. این markEmailAsVerified روش برای App\Models\User مدل پیش فرض از طریق Illuminate\Foundation\Auth\User کلاس پایه در دسترس است. هنگامی که آدرس ایمیل کاربر تأیید شد، می توانید آنها را به هر کجا که می خواهید هدایت کنید.

در حال ارسال مجدد ایمیل تایید

گاهی اوقات ممکن است یک کاربر ایمیل تأیید آدرس ایمیل را به اشتباه درج کرده یا به طور تصادفی حذف کند. برای تطبیق با این موضوع، ممکن است بخواهید مسیری را تعریف کنید که به کاربر اجازه دهد درخواست ارسال مجدد ایمیل تأیید را بدهد. سپس می‌توانید با قرار دادن یک دکمه ساده ارسال فرم در نمای اعلان تأیید خود، درخواستی برای این مسیر ارسال کنید :

use Illuminate\Http\Request;
 
Route::post('/email/verification-notification', function (Request $request) {
$request->user()->sendEmailVerificationNotification();
 
return back()->with('message', 'Verification link sent!');
})->middleware(['auth', 'throttle:6,1'])->name('verification.send');

حفاظت از مسیرها

Route middleware ممکن است فقط برای اجازه دادن به کاربران تأیید شده برای دسترسی به یک مسیر مشخص استفاده شود. لاراول شامل یک verified نام مستعار میان‌افزار است که نام مستعار Illuminate\Auth\Middleware\EnsureEmailIsVerified کلاس میان‌افزار است. از آنجایی که این نام مستعار قبلاً به طور خودکار توسط لاراول ثبت شده است، تنها کاری که باید انجام دهید این است که verified میان افزار را به یک تعریف مسیر متصل کنید. به طور معمول، این میان افزار با auth میان افزار جفت می شود:

Route::get('/profile', function () {
// Only verified users may access this route...
})->middleware(['auth', 'verified']);

اگر یک کاربر تأیید نشده سعی کند به مسیری دسترسی پیدا کند که به این میان افزار اختصاص داده شده است، به طور خودکار به verification.notice مسیر نامگذاری شده هدایت می شود .

سفارشی سازی

سفارشی سازی ایمیل تایید

اگرچه اعلان تأیید ایمیل پیش‌فرض باید الزامات اکثر برنامه‌ها را برآورده کند، لاراول به شما اجازه می‌دهد تا نحوه ساخت پیام ایمیل تأیید ایمیل را سفارشی کنید.

toMailUsing برای شروع، روش ارائه شده توسط اعلان را بسته کنید Illuminate\Auth\Notifications\VerifyEmail . بسته، نمونه مدل قابل اطلاع‌رسانی را که اعلان را دریافت می‌کند و همچنین نشانی اینترنتی تأیید ایمیل امضا شده را دریافت می‌کند که کاربر برای تأیید آدرس ایمیل خود باید از آن بازدید کند. بسته شدن باید یک نمونه از Illuminate\Notifications\Messages\MailMessage . به طور معمول، شما باید toMailUsing متد را از boot متد کلاس برنامه خود فراخوانی کنید AppServiceProvider :

use Illuminate\Auth\Notifications\VerifyEmail;
use Illuminate\Notifications\Messages\MailMessage;
 
/**
* Bootstrap any application services.
*/
public function boot(): void
{
// ...
 
VerifyEmail::toMailUsing(function (object $notifiable, string $url) {
return (new MailMessage)
->subject('Verify Email Address')
->line('Click the button below to verify your email address.')
->action('Verify Email Address', $url);
});
}

برای کسب اطلاعات بیشتر در مورد اعلان‌های ایمیل، لطفاً به مستندات اعلان ایمیل مراجعه کنید .

مناسبت ها

هنگام استفاده از کیت های شروع برنامه لاراول ، لاراول یک Illuminate\Auth\Events\Verified رویداد را در طول فرآیند تأیید ایمیل ارسال می کند. اگر به صورت دستی تأیید ایمیل را برای برنامه خود مدیریت می کنید، ممکن است بخواهید پس از تکمیل تأیید، این رویدادها را به صورت دستی ارسال کنید.