لاراول فورتیفای
- معرفی
- نصب و راه اندازی
- احراز هویت
- احراز هویت دو عاملی
- ثبت
- تنظیم مجدد رمز عبور
- تایید ایمیل
- تایید رمز عبور
معرفی
Laravel Fortify
یک پیادهسازی باطن احراز هویت آگنوستیک برای لاراول است. Fortify مسیرها و کنترلکنندههای مورد نیاز برای اجرای تمامی ویژگیهای احراز هویت لاراول، از جمله ورود، ثبت نام، بازنشانی رمز عبور، تأیید ایمیل و موارد دیگر را ثبت میکند. پس از نصب فورتیفای، میتوانید
route:list
دستور Artisan را برای مشاهده مسیرهایی که فورتیفای ثبت کرده است، اجرا کنید.
از آنجایی که Fortify رابط کاربری خود را ارائه نمی دهد، به این معناست که با رابط کاربری خود شما جفت شود که برای مسیرهایی که ثبت می کند درخواست می کند. در ادامه این مستندات دقیقاً درباره نحوه درخواست برای این مسیرها صحبت خواهیم کرد.
به یاد داشته باشید، Fortify بسته ای است که به شما اجازه می دهد تا ویژگی های احراز هویت لاراول را پیاده سازی کنید. شما نیازی به استفاده از آن ندارید. شما همیشه آزاد هستید که به صورت دستی با سرویس های احراز هویت لاراول با دنبال کردن اسناد موجود در احراز هویت ، تنظیم مجدد رمز عبور و اسناد تأیید ایمیل ، تعامل داشته باشید.
Fortify چیست؟
همانطور که قبلا ذکر شد، Laravel Fortify یک پیادهسازی باطن احراز هویت آگنوستیک برای لاراول است. Fortify مسیرها و کنترلکنندههای مورد نیاز برای اجرای تمامی ویژگیهای احراز هویت لاراول، از جمله ورود، ثبت نام، بازنشانی رمز عبور، تأیید ایمیل و موارد دیگر را ثبت میکند.
برای استفاده از ویژگی های احراز هویت لاراول نیازی به استفاده از Fortify نیست. شما همیشه آزاد هستید که به صورت دستی با سرویس های احراز هویت لاراول با دنبال کردن اسناد موجود در احراز هویت ، تنظیم مجدد رمز عبور و اسناد تأیید ایمیل ، تعامل داشته باشید.
اگر تازه وارد لاراول هستید، ممکن است بخواهید قبل از استفاده از Laravel Fortify، کیت شروع برنامه Laravel Breeze را بررسی کنید. Laravel Breeze یک داربست احراز هویت برای برنامه شما فراهم می کند که شامل یک رابط کاربری ساخته شده با Tailwind CSS است . برخلاف Fortify، Breeze مسیرها و کنترلرهای خود را مستقیماً در برنامه شما منتشر می کند. این به شما امکان می دهد قبل از اینکه به Laravel Fortify این ویژگی ها را برای شما پیاده سازی کند، ویژگی های احراز هویت لاراول را مطالعه کرده و راحت باشید.
Laravel Fortify اساساً مسیرها و کنترلرهای Laravel Breeze را در نظر می گیرد و آنها را به عنوان بسته ای ارائه می دهد که شامل رابط کاربری نیست. این به شما این امکان را میدهد که به سرعت پیادهسازی باطن لایه احراز هویت برنامهتان را بدون اینکه به نظرات ظاهری خاصی گره بخورید، داربست کنید.
چه زمانی باید از Fortify استفاده کنم؟
ممکن است این سوال برای شما پیش بیاید که چه زمانی استفاده از لاراول فورتیفای مناسب است. ابتدا، اگر از یکی از کیت های شروع برنامه لاراول استفاده می کنید ، نیازی به نصب Laravel Fortify ندارید زیرا همه کیت های شروع برنامه لاراول قبلاً یک پیاده سازی احراز هویت کامل را ارائه می دهند.
اگر از کیت شروع برنامه استفاده نمی کنید و برنامه شما به ویژگی های احراز هویت نیاز دارد، دو گزینه دارید: به صورت دستی ویژگی های احراز هویت برنامه خود را پیاده سازی کنید یا از Laravel Fortify برای ارائه اجرای Backend این ویژگی ها استفاده کنید.
اگر نصب Fortify را انتخاب کنید، رابط کاربری شما برای احراز هویت و ثبت نام کاربران، درخواست هایی را برای مسیرهای احراز هویت Fortify که در این مستندات به تفصیل آمده است، ارسال می کند.
اگر بهجای استفاده از Fortify، تعامل دستی با سرویسهای احراز هویت لاراول را انتخاب میکنید، میتوانید این کار را با دنبال کردن اسناد موجود در اسناد احراز هویت ، بازنشانی رمز عبور و تأیید ایمیل انجام دهید .
Laravel Fortify و Laravel Sanctum
برخی از توسعه دهندگان در مورد تفاوت Laravel Sanctum و Laravel Fortify گیج می شوند. از آنجایی که این دو بسته دو مشکل متفاوت اما مرتبط را حل می کنند، Laravel Fortify و Laravel Sanctum بسته های متقابل انحصاری یا رقیب نیستند.
Laravel Sanctum تنها به مدیریت توکنهای API و احراز هویت کاربران موجود با استفاده از کوکیهای جلسه یا توکنها میپردازد. Sanctum هیچ مسیری برای ثبت نام کاربر، تنظیم مجدد رمز عبور و غیره ارائه نمی دهد.
اگر میخواهید به صورت دستی لایه احراز هویت را برای برنامهای بسازید که یک API ارائه میدهد یا به عنوان پشتیبان یک برنامه تک صفحهای عمل میکند، کاملاً ممکن است از Laravel Fortify (برای ثبت نام کاربر، تنظیم مجدد رمز عبور و غیره) استفاده کنید. ) و Laravel Sanctum (مدیریت توکن API، احراز هویت جلسه).
نصب و راه اندازی
برای شروع، Fortify را با استفاده از مدیریت بسته Composer نصب کنید:
composer require laravel/fortify
سپس، منابع Fortify را با استفاده از
fortify:install
دستور Artisan منتشر کنید:
php artisan fortify:install
این دستور اقدامات Fortify را در
app/Actions
دایرکتوری شما منتشر می کند که در صورت عدم وجود آن ایجاد می شود. علاوه بر این
FortifyServiceProvider
، فایل پیکربندی و تمامی انتقالهای لازم پایگاه داده منتشر خواهد شد.
در مرحله بعد، باید پایگاه داده خود را مهاجرت کنید:
php artisan migrate
ویژگی های تقویت شده
فایل
fortify
پیکربندی حاوی یک
features
آرایه پیکربندی است. این آرایه مشخص میکند که Fortify کدام مسیرها/ویژگیهای Backend را بهطور پیشفرض در معرض نمایش قرار میدهد. اگر از Fortify در ترکیب با
Laravel Jetstream
استفاده نمیکنید
، توصیه میکنیم فقط ویژگیهای زیر را فعال کنید، که ویژگیهای اصلی احراز هویت هستند که توسط اکثر برنامههای لاراول ارائه میشوند:
'features' => [ Features::registration(), Features::resetPasswords(), Features::emailVerification(),],
غیرفعال کردن نماها
به طور پیش فرض، Fortify مسیرهایی را تعریف می کند که برای بازگرداندن نماها در نظر گرفته شده است، مانند صفحه ورود یا صفحه ثبت نام. با این حال، اگر در حال ساخت یک برنامه تک صفحه ای مبتنی بر جاوا اسکریپت هستید، ممکن است به این مسیرها نیاز نداشته باشید. به همین دلیل، میتوانید با تنظیم مقدار پیکربندی در
فایل پیکربندی
views
برنامه خود، این مسیرها را به طور کامل غیرفعال کنید
:
config/fortify.php
false
'views' => false,
غیرفعال کردن نماها و بازنشانی رمز عبور
اگر نماهای Fortify را غیرفعال کنید و ویژگیهای بازنشانی رمز عبور را برای برنامه خود پیادهسازی میکنید، همچنان باید مسیری به نام تعیین کنید
password.reset
که مسئول نمایش نمای "بازنشانی رمز عبور" برنامه شما است. این امر ضروری است زیرا اعلان لاراول
Illuminate\Auth\Notifications\ResetPassword
URL بازنشانی رمز عبور را از طریق
password.reset
مسیر نامگذاری شده ایجاد می کند.
احراز هویت
برای شروع، باید به Fortify آموزش دهیم که چگونه نمای "ورود" خود را بازگرداند. به یاد داشته باشید، Fortify یک کتابخانه احراز هویت بدون سر است. اگر میخواهید یک پیادهسازی frontend از ویژگیهای احراز هویت لاراول که قبلاً برای شما تکمیل شده است، داشته باشید، باید از یک کیت شروع برنامه استفاده کنید .
تمام منطق رندر نمای احراز هویت ممکن است با استفاده از روش های مناسب موجود از طریق
Laravel\Fortify\Fortify
کلاس سفارشی شود. به طور معمول، شما باید این متد را از
boot
متد کلاس برنامه خود فراخوانی کنید
App\Providers\FortifyServiceProvider
. Fortify در تعریف مسیری که این نمای را برمی گرداند، مراقبت می کند
/login
:
use Laravel\Fortify\Fortify; /** * Bootstrap any application services. */public function boot(): void{ Fortify::loginView(function () { return view('auth.login'); }); // ...}
الگوی ورود شما باید دارای فرمی باشد که یک درخواست POST به
/login
. نقطه
/login
پایانی انتظار یک رشته
email
/
username
و یک
password
. نام فیلد ایمیل / نام کاربری باید با
username
مقدار داخل
config/fortify.php
فایل پیکربندی مطابقت داشته باشد. علاوه بر این،
remember
ممکن است یک فیلد بولی برای نشان دادن اینکه کاربر مایل است از عملکرد "مرا به خاطر بسپار" ارائه شده توسط لاراول ارائه شود.
اگر تلاش برای ورود به سیستم موفقیت آمیز باشد، Fortify شما را به URI پیکربندی شده از طریق
home
گزینه پیکربندی در فایل پیکربندی برنامه شما هدایت می کند
fortify
. اگر درخواست ورود به سیستم یک درخواست XHR باشد، یک پاسخ HTTP 200 برگردانده خواهد شد.
اگر درخواست موفقیت آمیز نبود، کاربر به صفحه ورود به سیستم هدایت می شود و خطاهای اعتبارسنجی از طریق
$errors
متغیر الگوی Blade
به اشتراک گذاشته شده در دسترس شما قرار می گیرد . یا در صورت درخواست XHR، خطاهای اعتبارسنجی با پاسخ HTTP 422 برگردانده میشوند.
سفارشی کردن احراز هویت کاربر
Fortify به طور خودکار کاربر را بر اساس اعتبار ارائه شده و محافظ احراز هویت که برای برنامه شما پیکربندی شده است، بازیابی و احراز هویت می کند. با این حال، ممکن است گاهی اوقات بخواهید سفارشی سازی کاملی در مورد نحوه احراز هویت اعتبار ورود و بازیابی کاربران داشته باشید. خوشبختانه، Fortify به شما اجازه می دهد تا با استفاده از این
Fortify::authenticateUsing
روش به راحتی این کار را انجام دهید.
این روش بسته شدنی را میپذیرد که درخواست HTTP ورودی را دریافت میکند. بسته شدن مسئول تأیید اعتبار ورود به سیستم پیوست شده به درخواست و بازگرداندن نمونه کاربر مرتبط است. اگر اعتبارنامه ها نامعتبر هستند یا هیچ کاربری پیدا نمی شود،
null
یا
false
باید با بسته شدن بازگردانده شوند. به طور معمول، این متد باید از
boot
متد شما
فراخوانی شود
FortifyServiceProvider
:
use App\Models\User;use Illuminate\Http\Request;use Illuminate\Support\Facades\Hash;use Laravel\Fortify\Fortify; /** * Bootstrap any application services. */public function boot(): void{ Fortify::authenticateUsing(function (Request $request) { $user = User::where('email', $request->email)->first(); if ($user && Hash::check($request->password, $user->password)) { return $user; } }); // ...}
گارد احراز هویت
میتوانید محافظ احراز هویت استفاده شده توسط Fortify را در فایل پیکربندی برنامه خود سفارشی کنید
fortify
. با این حال، باید مطمئن شوید که گارد پیکربندی شده پیاده سازی شده است
Illuminate\Contracts\Auth\StatefulGuard
. اگر می خواهید از Laravel Fortify برای احراز هویت یک SPA استفاده کنید، باید از
web
گارد پیش فرض لاراول در ترکیب با
Laravel Sanctum
استفاده کنید .
سفارشی کردن خط لوله احراز هویت
Laravel Fortify درخواست های ورود را از طریق خط لوله ای از کلاس های فراخوانی احراز هویت می کند. اگر بخواهید، میتوانید خط لوله سفارشی کلاسهایی را تعریف کنید که درخواستهای ورود باید از طریق آن ارسال شوند. هر کلاس باید
__invoke
متدی داشته باشد که
Illuminate\Http\Request
نمونه ورودی را دریافت میکند و مانند
میانافزار
،
$next
متغیری است که برای ارسال درخواست به کلاس بعدی در خط لوله فراخوانی میشود.
برای تعریف خط لوله سفارشی خود، می توانید از
Fortify::authenticateThrough
روش استفاده کنید. این روش بسته شدنی را میپذیرد که باید آرایه کلاسها را برای لولهکردن درخواست ورود از طریق آن بازگرداند. به طور معمول، این متد باید از
boot
متد کلاس شما فراخوانی شود
App\Providers\FortifyServiceProvider
.
مثال زیر شامل تعریف خط لوله پیشفرض است که میتوانید هنگام انجام تغییرات خود از آن به عنوان نقطه شروع استفاده کنید:
use Laravel\Fortify\Actions\AttemptToAuthenticate;use Laravel\Fortify\Actions\EnsureLoginIsNotThrottled;use Laravel\Fortify\Actions\PrepareAuthenticatedSession;use Laravel\Fortify\Actions\RedirectIfTwoFactorAuthenticatable;use Laravel\Fortify\Fortify;use Illuminate\Http\Request; Fortify::authenticateThrough(function (Request $request) { return array_filter([ config('fortify.limiters.login') ? null : EnsureLoginIsNotThrottled::class, Features::enabled(Features::twoFactorAuthentication()) ? RedirectIfTwoFactorAuthenticatable::class : null, AttemptToAuthenticate::class, PrepareAuthenticatedSession::class, ]);});
سفارشی کردن تغییر مسیرها
اگر تلاش برای ورود به سیستم موفقیت آمیز باشد، Fortify شما را به URI پیکربندی شده از طریق
home
گزینه پیکربندی در فایل پیکربندی برنامه شما هدایت می کند
fortify
. اگر درخواست ورود به سیستم یک درخواست XHR باشد، یک پاسخ HTTP 200 برگردانده خواهد شد. پس از خروج کاربر از برنامه، کاربر به
/
URI هدایت می شود.
اگر به سفارشیسازی پیشرفته این رفتار نیاز دارید، میتوانید پیادهسازیهای
LoginResponse
و
LogoutResponse
قراردادها را به
ظرف سرویس
لاراول متصل کنید . به طور معمول، این باید در
register
متد کلاس برنامه شما
انجام شود
App\Providers\FortifyServiceProvider
:
use Laravel\Fortify\Contracts\LogoutResponse; /** * Register any application services. */public function register(): void{ $this->app->instance(LogoutResponse::class, new class implements LogoutResponse { public function toResponse($request) { return redirect('/'); } });}
احراز هویت دو عاملی
هنگامی که ویژگی احراز هویت دو عاملی Fortify فعال است، کاربر باید یک رمز عددی شش رقمی را در طول فرآیند احراز هویت وارد کند. این نشانه با استفاده از یک رمز عبور یک بار مصرف مبتنی بر زمان (TOTP) تولید میشود که میتواند از هر برنامه احراز هویت تلفن همراه سازگار با TOTP مانند Google Authenticator بازیابی شود.
App\Models\User
قبل از شروع، ابتدا باید مطمئن شوید که مدل
برنامه شما از این
Laravel\Fortify\TwoFactorAuthenticatable
ویژگی استفاده می کند:
<?php namespace App\Models; use Illuminate\Foundation\Auth\User as Authenticatable;use Illuminate\Notifications\Notifiable;use Laravel\Fortify\TwoFactorAuthenticatable; class User extends Authenticatable{ use Notifiable, TwoFactorAuthenticatable;}
در مرحله بعد، باید یک صفحه نمایش در برنامه خود بسازید که کاربران بتوانند تنظیمات احراز هویت دو عاملی خود را مدیریت کنند. این صفحه باید به کاربر اجازه دهد تا احراز هویت دو عاملی را فعال و غیرفعال کند و همچنین کدهای بازیابی احراز هویت دو عاملی خود را بازسازی کند.
بهطور پیشفرض،
features
آرایهfortify
فایل پیکربندی به تنظیمات احراز هویت دو عاملی Fortify دستور میدهد تا قبل از تغییر، تأیید رمز عبور را لازم داشته باشند. بنابراین، برنامه شما باید قبل از ادامه، ویژگی تأیید رمز عبور Fortify را اجرا کند .
فعال کردن احراز هویت دو عاملی
برای شروع فعال کردن احراز هویت دو عاملی، برنامه شما باید یک درخواست POST به
/user/two-factor-authentication
نقطه پایانی تعریف شده توسط Fortify ارسال کند. اگر درخواست موفقیت آمیز باشد، کاربر به URL قبلی هدایت می شود و
status
متغیر جلسه روی تنظیم می شود
two-factor-authentication-enabled
. می توانید این
status
متغیر جلسه را در قالب های خود شناسایی کنید تا پیام موفقیت مناسب را نمایش دهید. اگر درخواست یک درخواست XHR بود،
200
پاسخ HTTP برگردانده می شود.
پس از انتخاب فعال کردن احراز هویت دو عاملی، کاربر همچنان باید پیکربندی احراز هویت دو عاملی خود را با ارائه یک کد احراز هویت دو عاملی معتبر "تأیید" کند. بنابراین، پیام "موفقیت" شما باید به کاربر دستور دهد که هنوز تایید احراز هویت دو عاملی مورد نیاز است:
@if (session('status') == 'two-factor-authentication-enabled') <div class="mb-4 font-medium text-sm"> Please finish configuring two factor authentication below. </div>@endif
در مرحله بعد، باید کد QR احراز هویت دو عاملی را برای کاربر نمایش دهید تا در برنامه احراز هویت خود اسکن کند. اگر از Blade برای رندر کردن ظاهر برنامه خود استفاده می کنید، می توانید کد QR SVG را با استفاده از
twoFactorQrCodeSvg
روش موجود در نمونه کاربر بازیابی کنید:
$request->user()->twoFactorQrCodeSvg();
اگر در حال ساختن یک فرانتاند مبتنی بر جاوا اسکریپت هستید، میتوانید یک درخواست XHR GET به
/user/two-factor-qr-code
نقطه پایانی ارسال کنید تا کد QR احراز هویت دو عاملی کاربر را بازیابی کنید. این نقطه پایانی یک شی JSON حاوی یک کلید را برمی گرداند
svg
.
تایید احراز هویت دو عاملی
علاوه بر نمایش کد QR احراز هویت دو عاملی کاربر، باید یک ورودی متنی ارائه دهید که در آن کاربر بتواند یک کد احراز هویت معتبر برای "تأیید" پیکربندی احراز هویت دو عاملی خود ارائه کند. این کد باید از طریق یک درخواست POST به
/user/confirmed-two-factor-authentication
نقطه پایانی تعریف شده توسط Fortify در اختیار برنامه لاراول قرار گیرد.
در صورت موفقیت آمیز بودن درخواست، کاربر به URL قبلی هدایت می شود و
status
متغیر جلسه به صورت زیر تنظیم می شود
two-factor-authentication-confirmed
:
@if (session('status') == 'two-factor-authentication-confirmed') <div class="mb-4 font-medium text-sm"> Two factor authentication confirmed and enabled successfully. </div>@endif
اگر درخواست به نقطه پایانی تایید احراز هویت دو عاملی از طریق یک درخواست XHR انجام شده باشد، یک
200
پاسخ HTTP برگردانده خواهد شد.
نمایش کدهای بازیابی
همچنین باید دو کد بازیابی فاکتور کاربر را نمایش دهید. این کدهای بازیابی به کاربر این امکان را می دهد که در صورت از دست دادن دسترسی به دستگاه تلفن همراه خود، احراز هویت را انجام دهد. اگر از Blade برای رندر کردن ظاهر برنامه خود استفاده می کنید، می توانید از طریق نمونه کاربری تأیید شده به کدهای بازیابی دسترسی داشته باشید:
(array) $request->user()->recoveryCodes()
اگر در حال ساختن یک فرانت اند با جاوا اسکریپت هستید، می توانید یک درخواست XHR GET به
/user/two-factor-recovery-codes
نقطه پایانی ارسال کنید. این نقطه پایانی یک آرایه JSON حاوی کدهای بازیابی کاربر را برمی گرداند.
برای ایجاد مجدد کدهای بازیابی کاربر، برنامه شما باید یک درخواست POST به
/user/two-factor-recovery-codes
نقطه پایانی ارسال کند.
احراز هویت با احراز هویت دو عاملی
در طول فرآیند احراز هویت، Fortify به طور خودکار کاربر را به صفحه چالش احراز هویت دو عاملی برنامه شما هدایت می کند. با این حال، اگر برنامه شما یک درخواست ورود به سیستم XHR ارائه میکند، پاسخ JSON که پس از یک تلاش موفق برای احراز هویت بازگردانده میشود، حاوی یک شی JSON است که دارای یک
two_factor
ویژگی بولی است. شما باید این مقدار را بررسی کنید تا بدانید که آیا باید به صفحه چالش احراز هویت دو عاملی برنامه خود هدایت شوید یا خیر.
برای شروع اجرای قابلیت احراز هویت دو عاملی، باید به Fortify آموزش دهیم که چگونه نمای چالش احراز هویت دو عاملی خود را بازگرداند. تمام منطق رندر نمای احراز هویت Fortify ممکن است با استفاده از روش های مناسب موجود از طریق
Laravel\Fortify\Fortify
کلاس سفارشی شود. به طور معمول، شما باید این متد را از
boot
متد کلاس برنامه خود فراخوانی کنید
App\Providers\FortifyServiceProvider
:
use Laravel\Fortify\Fortify; /** * Bootstrap any application services. */public function boot(): void{ Fortify::twoFactorChallengeView(function () { return view('auth.two-factor-challenge'); }); // ...}
Fortify وظیفه تعیین مسیری را بر عهده خواهد داشت
/two-factor-challenge
که این نمای را برمی گرداند. الگوی
شما
two-factor-challenge
باید دارای فرمی باشد که درخواست POST را به
/two-factor-challenge
نقطه پایانی ارسال کند. این
/two-factor-challenge
عمل،
code
فیلدی را انتظار دارد که حاوی یک نشانه معتبر TOTP یا
recovery_code
فیلدی است که حاوی یکی از کدهای بازیابی کاربر باشد.
اگر تلاش برای ورود به سیستم موفقیت آمیز باشد، Fortify کاربر را به URI پیکربندی شده از طریق
home
گزینه پیکربندی در فایل پیکربندی برنامه شما هدایت می کند
fortify
. اگر درخواست ورود به سیستم یک درخواست XHR باشد، یک پاسخ HTTP 204 برگردانده خواهد شد.
اگر درخواست موفقیت آمیز نبود، کاربر به صفحه چالش دو عاملی هدایت می شود و خطاهای اعتبارسنجی از طریق
$errors
متغیر الگوی Blade
به اشتراک گذاشته شده در دسترس شما قرار می گیرد . یا در صورت درخواست XHR، خطاهای اعتبارسنجی با یک پاسخ HTTP 422 برگردانده می شود.
غیرفعال کردن احراز هویت دو عاملی
برای غیرفعال کردن احراز هویت دو عاملی، برنامه شما باید یک درخواست DELETE به
/user/two-factor-authentication
نقطه پایانی ارسال کند. به یاد داشته باشید، نقاط پایانی احراز هویت دو عاملی Fortify
قبل از فراخوانی نیاز به
تأیید رمز عبور دارند.
ثبت
برای شروع اجرای قابلیت ثبت برنامه ما، باید به Fortify آموزش دهیم که چگونه نمای "ثبت نام" خود را بازگرداند. به یاد داشته باشید، Fortify یک کتابخانه احراز هویت بدون سر است. اگر میخواهید یک پیادهسازی frontend از ویژگیهای احراز هویت لاراول که قبلاً برای شما تکمیل شده است، داشته باشید، باید از یک کیت شروع برنامه استفاده کنید .
تمام منطق رندر نمای Fortify ممکن است با استفاده از روش های مناسب موجود از طریق
Laravel\Fortify\Fortify
کلاس سفارشی شود. به طور معمول، شما باید این متد را از
boot
متد کلاس خود فراخوانی کنید
App\Providers\FortifyServiceProvider
:
use Laravel\Fortify\Fortify; /** * Bootstrap any application services. */public function boot(): void{ Fortify::registerView(function () { return view('auth.register'); }); // ...}
Fortify وظیفه تعیین مسیری را بر عهده خواهد داشت
/register
که این نمای را برمی گرداند. الگوی
شما
register
باید دارای فرمی باشد که درخواست POST را به
/register
نقطه پایانی تعریف شده توسط Fortify ارسال کند.
نقطه
/register
پایانی انتظار یک رشته
name
، آدرس ایمیل رشته / نام کاربری،
password
و
password_confirmation
فیلدها را دارد. نام فیلد ایمیل / نام کاربری باید با
username
مقدار پیکربندی تعریف شده در فایل پیکربندی برنامه شما مطابقت داشته باشد
fortify
.
اگر تلاش برای ثبت نام موفقیت آمیز باشد، Fortify کاربر را به URI پیکربندی شده از طریق
home
گزینه پیکربندی در فایل پیکربندی برنامه شما هدایت می کند
fortify
. اگر درخواست یک درخواست XHR بود، یک پاسخ HTTP 201 برگردانده می شود.
اگر درخواست موفقیت آمیز نبود، کاربر به صفحه ثبت نام هدایت می شود و خطاهای اعتبارسنجی از طریق
$errors
متغیر الگوی Blade
به اشتراک گذاشته شده در دسترس شما قرار می گیرد . یا در صورت درخواست XHR، خطاهای اعتبارسنجی با یک پاسخ HTTP 422 برگردانده می شود.
سفارشی سازی ثبت نام
فرآیند اعتبار سنجی و ایجاد کاربر ممکن است با تغییر
App\Actions\Fortify\CreateNewUser
عملکردی که هنگام نصب Laravel Fortify ایجاد شده است، سفارشی شود.
تنظیم مجدد رمز عبور
درخواست پیوند بازنشانی رمز عبور
برای شروع اجرای قابلیت بازنشانی رمز عبور برنامه ما، باید به Fortify آموزش دهیم که چگونه نمای "گذرواژه فراموش شده" خود را بازگرداند. به یاد داشته باشید، Fortify یک کتابخانه احراز هویت بدون سر است. اگر میخواهید یک پیادهسازی frontend از ویژگیهای احراز هویت لاراول که قبلاً برای شما تکمیل شده است، داشته باشید، باید از یک کیت شروع برنامه استفاده کنید .
تمام منطق رندر نمای Fortify ممکن است با استفاده از روش های مناسب موجود از طریق
Laravel\Fortify\Fortify
کلاس سفارشی شود. به طور معمول، شما باید این متد را از
boot
متد کلاس برنامه خود فراخوانی کنید
App\Providers\FortifyServiceProvider
:
use Laravel\Fortify\Fortify; /** * Bootstrap any application services. */public function boot(): void{ Fortify::requestPasswordResetLinkView(function () { return view('auth.forgot-password'); }); // ...}
Fortify از تعریف نقطه پایانی که این نمای را برمی گرداند، مراقبت می کند
/forgot-password
. الگوی
شما
forgot-password
باید دارای فرمی باشد که درخواست POST را به
/forgot-password
نقطه پایانی ارسال کند.
نقطه
/forgot-password
پایانی انتظار یک
email
فیلد رشته ای را دارد. نام این فیلد / ستون پایگاه داده باید با
email
مقدار پیکربندی در فایل پیکربندی برنامه شما مطابقت داشته باشد
fortify
.
رسیدگی به پاسخ درخواست پیوند بازنشانی رمز عبور
اگر درخواست پیوند بازنشانی رمز عبور موفقیت آمیز بود، Fortify کاربر را به نقطه پایانی هدایت می کند
/forgot-password
و یک ایمیل با یک پیوند امن برای کاربر ارسال می کند که می تواند از آن برای بازنشانی رمز عبور خود استفاده کند. اگر درخواست یک درخواست XHR بود، یک پاسخ HTTP 200 برگردانده می شود.
/forgot-password
پس از اینکه پس از یک درخواست موفقیت آمیز
به نقطه پایانی هدایت شد ،
status
متغیر نشست ممکن است برای نمایش وضعیت تلاش برای پیوند بازنشانی رمز عبور استفاده شود.
مقدار
$status
متغیر session با یکی از رشته های ترجمه تعریف شده در
passwords
فایل زبان
برنامه شما مطابقت دارد . اگر میخواهید این مقدار را سفارشی کنید و فایلهای زبان لاراول را منتشر نکردهاید، میتوانید از طریق
lang:publish
دستور Artisan این کار را انجام دهید:
@if (session('status')) <div class="mb-4 font-medium text-sm text-green-600"> {{ session('status') }} </div>@endif
اگر درخواست موفقیت آمیز نبود، کاربر به صفحه پیوند بازنشانی رمز عبور درخواست هدایت می شود و خطاهای اعتبارسنجی از طریق
$errors
متغیر الگوی Blade
به اشتراک گذاشته شده در دسترس شما خواهد بود . یا در صورت درخواست XHR، خطاهای اعتبارسنجی با یک پاسخ HTTP 422 برگردانده می شود.
بازنشانی رمز عبور
برای اتمام اجرای عملکرد بازنشانی رمز عبور برنامه ما، باید به Fortify آموزش دهیم که چگونه نمای "بازنشانی رمز عبور" خود را بازگرداند.
تمام منطق رندر نمای Fortify ممکن است با استفاده از روش های مناسب موجود از طریق
Laravel\Fortify\Fortify
کلاس سفارشی شود. به طور معمول، شما باید این متد را از
boot
متد کلاس برنامه خود فراخوانی کنید
App\Providers\FortifyServiceProvider
:
use Laravel\Fortify\Fortify;use Illuminate\Http\Request; /** * Bootstrap any application services. */public function boot(): void{ Fortify::resetPasswordView(function (Request $request) { return view('auth.reset-password', ['request' => $request]); }); // ...}
Fortify به تعیین مسیر برای نمایش این نما رسیدگی می کند. الگوی
شما
reset-password
باید دارای فرمی باشد که یک درخواست POST به
/reset-password
.
نقطه
/reset-password
پایانی انتظار دارد یک
email
فیلد رشته، یک
password
فیلد، یک
password_confirmation
فیلد و یک فیلد مخفی به نام
token
که حاوی مقدار باشد
request()->route('token')
. نام فیلد / ستون پایگاه داده "ایمیل" باید با
email
مقدار پیکربندی تعریف شده در فایل پیکربندی برنامه شما مطابقت داشته باشد
fortify
.
مدیریت پاسخ بازنشانی رمز عبور
اگر درخواست بازنشانی رمز عبور موفقیت آمیز بود، Fortify به
/login
مسیر برگشت هدایت می شود تا کاربر بتواند با رمز عبور جدید خود وارد شود. علاوه بر این، یک
status
متغیر جلسه تنظیم می شود تا بتوانید وضعیت موفقیت آمیز تنظیم مجدد را در صفحه ورود به سیستم خود نمایش دهید:
@if (session('status')) <div class="mb-4 font-medium text-sm text-green-600"> {{ session('status') }} </div>@endif
اگر درخواست یک درخواست XHR بود، یک پاسخ HTTP 200 برگردانده می شود.
اگر درخواست موفقیت آمیز نبود، کاربر به صفحه بازنشانی رمز عبور هدایت می شود و خطاهای اعتبارسنجی از طریق
$errors
متغیر الگوی Blade
به اشتراک گذاشته شده در دسترس شما قرار می گیرد . یا در صورت درخواست XHR، خطاهای اعتبارسنجی با یک پاسخ HTTP 422 برگردانده می شود.
سفارشی کردن بازنشانی رمز عبور
فرآیند بازنشانی رمز عبور ممکن است با تغییر
App\Actions\ResetUserPassword
عملکردی که هنگام نصب Laravel Fortify ایجاد شده است، سفارشی شود.
تایید ایمیل
پس از ثبت نام، ممکن است بخواهید کاربران قبل از ادامه دسترسی به برنامه شما، آدرس ایمیل خود را تأیید کنند. برای شروع، مطمئن شوید که این ویژگی در آرایه
فایل پیکربندی
emailVerification
شما فعال است
. در مرحله بعد، باید مطمئن شوید که
کلاس شما
رابط را پیاده سازی می کند.
fortify
features
App\Models\User
Illuminate\Contracts\Auth\MustVerifyEmail
پس از تکمیل این دو مرحله راه اندازی، کاربرانی که به تازگی ثبت نام کرده اند ایمیلی دریافت می کنند که از آنها می خواهد مالکیت آدرس ایمیل خود را تأیید کنند. با این حال، ما باید به Fortify اطلاع دهیم که چگونه صفحه تأیید ایمیل را نمایش دهد که به کاربر اطلاع می دهد که باید بر روی پیوند تأیید در ایمیل کلیک کند.
تمام منطق رندر نمای Fortify ممکن است با استفاده از روش های مناسب موجود از طریق
Laravel\Fortify\Fortify
کلاس سفارشی شود. به طور معمول، شما باید این متد را از
boot
متد کلاس برنامه خود فراخوانی کنید
App\Providers\FortifyServiceProvider
:
use Laravel\Fortify\Fortify; /** * Bootstrap any application services. */public function boot(): void{ Fortify::verifyEmailView(function () { return view('auth.verify-email'); }); // ...}
/email/verify
وقتی کاربر توسط میانافزار داخلی لاراول
به نقطه پایانی هدایت میشود، فورتفای مسیری را که این نمای را نشان میدهد، تعیین میکند
verified
.
الگوی شما
verify-email
باید حاوی یک پیام اطلاعاتی باشد که به کاربر دستور می دهد روی پیوند تأیید ایمیلی که به آدرس ایمیل او ارسال شده است کلیک کند.
ارسال مجدد پیوندهای تایید ایمیل
در صورت تمایل، می توانید دکمه ای را به
verify-email
الگوی برنامه خود اضافه کنید که درخواست POST را به
/email/verification-notification
نقطه پایانی راه اندازی می کند. هنگامی که این نقطه پایانی درخواستی را دریافت می کند، یک پیوند ایمیل تأیید جدید برای کاربر ایمیل می شود که به کاربر امکان می دهد اگر پیوند قبلی به طور تصادفی حذف یا گم شد، پیوند تأیید جدیدی دریافت کند.
اگر درخواست ارسال مجدد ایمیل پیوند تأیید موفقیت آمیز بود، Fortify کاربر را
/email/verify
با یک
status
متغیر جلسه به نقطه پایانی هدایت می کند و به شما امکان می دهد یک پیام اطلاعاتی را برای کاربر نمایش دهید که به او اطلاع می دهد عملیات موفقیت آمیز بوده است. اگر درخواست یک درخواست XHR بود، یک پاسخ HTTP 202 برگردانده می شود:
@if (session('status') == 'verification-link-sent') <div class="mb-4 font-medium text-sm text-green-600"> A new email verification link has been emailed to you! </div>@endif
حفاظت از مسیرها
برای مشخص کردن اینکه یک مسیر یا گروهی از مسیرها نیاز دارد که کاربر آدرس ایمیل خود را تأیید کرده باشد، باید
verified
میان افزار داخلی لاراول را به مسیر متصل کنید. نام
verified
مستعار میان افزار به طور خودکار توسط لاراول ثبت می شود و به عنوان نام مستعار
Illuminate\Routing\Middleware\ValidateSignature
میان افزار عمل می کند:
Route::get('/dashboard', function () { // ...})->middleware(['verified']);
تایید رمز عبور
در حین ساخت برنامه خود، ممکن است گهگاه اقداماتی داشته باشید که باید کاربر را ملزم به تایید رمز عبور خود قبل از انجام عمل کند. به طور معمول، این مسیرها توسط میان افزار داخلی لاراول محافظت می شوند
password.confirm
.
برای شروع اجرای عملکرد تأیید رمز عبور، باید به Fortify آموزش دهیم که چگونه نمای "تأیید رمز عبور" برنامه ما را بازگرداند. به یاد داشته باشید، Fortify یک کتابخانه احراز هویت بدون سر است. اگر میخواهید یک پیادهسازی frontend از ویژگیهای احراز هویت لاراول که قبلاً برای شما تکمیل شده است، داشته باشید، باید از یک کیت شروع برنامه استفاده کنید .
تمام منطق رندر نمای Fortify ممکن است با استفاده از روش های مناسب موجود از طریق
Laravel\Fortify\Fortify
کلاس سفارشی شود. به طور معمول، شما باید این متد را از
boot
متد کلاس برنامه خود فراخوانی کنید
App\Providers\FortifyServiceProvider
:
use Laravel\Fortify\Fortify; /** * Bootstrap any application services. */public function boot(): void{ Fortify::confirmPasswordView(function () { return view('auth.confirm-password'); }); // ...}
Fortify از تعریف نقطه پایانی که این نمای را برمی گرداند، مراقبت می کند
/user/confirm-password
. الگوی
شما
confirm-password
باید دارای فرمی باشد که درخواست POST را به
/user/confirm-password
نقطه پایانی ارسال کند. نقطه پایانی فیلدی
/user/confirm-password
را انتظار دارد
password
که حاوی رمز عبور فعلی کاربر باشد.
اگر رمز عبور با رمز عبور فعلی کاربر مطابقت داشته باشد، Fortify کاربر را به مسیری که میخواست به آن دسترسی داشته باشد هدایت میکند. اگر درخواست یک درخواست XHR بود، یک پاسخ HTTP 201 برگردانده می شود.
اگر درخواست موفقیت آمیز نبود، کاربر به صفحه تأیید رمز عبور هدایت می شود و خطاهای تأیید اعتبار از طریق
$errors
متغیر الگوی Blade به اشتراک گذاشته شده در دسترس شما قرار می گیرد. یا در صورت درخواست XHR، خطاهای اعتبارسنجی با یک پاسخ HTTP 422 برگردانده می شود.