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