تایید ایمیل
معرفی
بسیاری از برنامه های کاربردی وب از کاربران می خواهند که آدرس ایمیل خود را قبل از استفاده از برنامه تأیید کنند. لاراول به جای اینکه شما را مجبور کند که این ویژگی را با دست برای هر برنامه ای که ایجاد می کنید دوباره پیاده سازی کنید، خدمات داخلی مناسبی برای ارسال و تأیید درخواست های تأیید ایمیل ارائه می دهد.
می خواهید سریع شروع کنید؟ یکی از کیت های شروع برنامه لاراول را در یک برنامه جدید لاراول نصب کنید. کیت های آغازین از داربست کل سیستم احراز هویت شما، از جمله پشتیبانی تایید ایمیل، مراقبت خواهند کرد.
آماده سازی مدل
قبل از شروع، بررسی کنید که
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, ],];