نسخه:

تایید ایمیل

معرفی

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

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

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

قبل از شروع، بررسی کنید که 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;
 
// ...
}

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

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

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

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

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

php artisan migrate

مسیریابی

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

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

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

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

همانطور که قبلاً ذکر شد، باید مسیری تعریف شود که یک نمای را به کاربر باز می‌گرداند که به کاربر دستور می‌دهد پس از ثبت نام، روی پیوند تأیید ایمیلی که توسط لاراول برای او ایمیل شده است کلیک کند. این نمای زمانی برای کاربران نمایش داده می شود که آنها سعی می کنند به قسمت های دیگر برنامه دسترسی پیدا کنند بدون اینکه ابتدا آدرس ایمیل خود را تأیید کنند. به یاد داشته باشید، تا زمانی که 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 کلاس ارجاع می دهد. از آنجایی که این میان افزار قبلاً در هسته HTTP برنامه شما ثبت شده است، تنها کاری که باید انجام دهید این است که میان افزار را به یک تعریف مسیر متصل کنید. به طور معمول، این میان افزار با 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 متد کلاس برنامه خود فراخوانی کنید App\Providers\AuthServiceProvider :

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

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

مناسبت ها

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

use App\Listeners\LogVerifiedUser;
use Illuminate\Auth\Events\Verified;
 
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
Verified::class => [
LogVerifiedUser::class,
],
];