نسخه:

لاراول فورتیفای

معرفی

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 برگردانده می شود.