Laravel Fortify چیست و چطور سیستم احراز هویت لاراول را قدرتمندتر می‌کند؟ — راهنمای جامع

بیشتر اپلیکیشن‌های تحت وب نیاز به یک سیستم احراز هویت امن و کامل دارن: ثبت‌نام، ورود، بازیابی رمز، تایید ایمیل، لاگ‌اوت و حتی احراز هویت دو مرحله‌ای (2FA). لاراول برای همین موضوع یک پکیج رسمی معرفی کرده به اسم Fortify. تفاوت Fortify با پکیج‌هایی مثل Jetstream اینه که خودش UI نداره. یعنی فقط منطق سمت سرور و APIها رو برات آماده می‌کنه، و تو می‌تونی آزادانه هر UI دلخواهی (Blade، Vue، React یا حتی موبایل) روش پیاده کنی.

Laravel Fortify چیست؟

Fortify یک implementation بک‌اندی برای تمام عملیات authentication لاراول است. این پکیج یک سری route و action تعریف می‌کنه (مثل /login، /register، /user/password) و اون‌ها رو مدیریت می‌کنه. خوبی‌اش اینه که تو هیچ وابستگی به UI نداری و می‌تونی در کنار SPAها یا اپلیکیشن موبایل ازش استفاده کنی.

نکته: اگر از استارترکیت‌های لاراول مثل Jetstream یا Breeze استفاده می‌کنی، اون‌ها خودشون Fortify رو زیر کاپوت دارن. پس معمولاً نیازی به نصب مجدد Fortify نداری مگر اینکه بخوای کاملاً UI سفارشی بسازی.

نصب Fortify

composer require laravel/fortify

سپس provider رو اضافه کن:


// config/app.php
'providers' => [
    // ...
    App\Providers\FortifyServiceProvider::class,
],
  

بعد از نصب، باید migrations رو اجرا کنی:

php artisan migrate

تنظیم ویژگی‌ها در کانفیگ

همه امکانات Fortify رو می‌تونی در فایل config/fortify.php فعال یا غیرفعال کنی. مثلاً:


'features' => [
    Features::registration(),
    Features::resetPasswords(),
    Features::emailVerification(),
    Features::twoFactorAuthentication([
        'confirmPassword' => true,
    ]),
],
  

غیرفعال کردن Viewها

چون Fortify می‌تونه به جای view، API ارائه بده، می‌تونی در فایل کانفیگ viewها رو غیر فعال کنی:


'views' => false,
  

تعریف Viewهای سفارشی


use Laravel\Fortify\Fortify;

public function boot()
{
    Fortify::loginView(fn () => view('auth.login'));
    Fortify::registerView(fn () => view('auth.register'));
}
  

اکشن سفارشی برای ثبت‌نام


namespace App\Actions\Fortify;

use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;

class CreateNewUser
{
    public function create(array $input)
    {
        Validator::make($input, [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'phone' => ['required', 'string', 'max:15'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ])->validate();

        return User::create([
            'name' => $input['name'],
            'email' => $input['email'],
            'phone' => $input['phone'],
            'password' => Hash::make($input['password']),
        ]);
    }
}
  

Two-Factor Authentication (2FA)


use Laravel\Fortify\TwoFactorAuthenticatable;

class User extends Authenticatable
{
    use TwoFactorAuthenticatable;
}
  

Authentication Pipeline


Fortify::authenticateThrough(function ($request) {
    return [
        \Laravel\Fortify\Http\Middleware\EnsureLoginIsNotThrottled::class,
        \App\Http\Middleware\LowercaseUsername::class,
        \Laravel\Fortify\Actions\AttemptToAuthenticate::class,
        \Laravel\Fortify\Actions\PrepareAuthenticatedSession::class,
    ];
});
  

سفارشی‌سازی Redirectها


// App\Providers\FortifyServiceProvider
$this->app->singleton(
    \Laravel\Fortify\Contracts\LoginResponse::class,
    \App\Http\Responses\CustomLoginResponse::class
);
  

مقایسه Fortify و Jetstream

  • Fortify: فقط بک‌اند، بدون UI. مناسب برای پروژه‌هایی که UI سفارشی دارن یا اپ موبایل می‌خوان.
  • Jetstream: روی Fortify ساخته شده ولی UI آماده (Livewire یا Inertia) + امکانات مثل Teams و Profile داره.

جمع‌بندی

Laravel Fortify یک پکیج رسمی و قدرتمند برای مدیریت authentication در لاراول است. اگر می‌خوای کنترل کامل روی UI داشته باشی (مثلاً یک SPA یا اپلیکیشن موبایل بسازی)، Fortify بهترین انتخابه. ولی اگر می‌خوای همه‌چیز آماده باشه و سریع شروع کنی، Jetstream گزینه‌ی بهتریه چون Fortify رو زیر کاپوت خودش داره.