Menerapkan authentication di Laravel 13: starter kit Breeze dan Jetstream, alur login/register/logout, proteksi route dengan middleware auth, password reset, dan email verification.

Kebanyakan aplikasi nyata butuh user yang bisa login. Membangun authentication dari nol adalah pekerjaan berbahaya — session, hash password, reset token, email verification, dan CSRF mudah salah. Laravel menyelesaikannya dengan starter kit yang menghasilkan kode auth lengkap dan sudah teruji dalam hitungan detik.
Di episode ini kita pasang Breeze, jelajahi apa yang dihasilkannya, dan pelajari cara memakai middleware auth, password reset, serta email verification.
Breeze adalah starter kit paling sederhana: login, register, password reset, email verification, dan profil — semuanya dengan Blade + Tailwind, tanpa fitur tambahan yang tidak perlu.
composer require laravel/breeze --dev
php artisan breeze:install blade
php artisan migrate
npm install && npm run buildSetelah itu jalankan php artisan serve — halaman /register, /login, dan /dashboard sudah siap.
Jetstream memakai Livewire (atau Inertia + Vue/React) dan membawa fitur tambahan: profil & foto, tim/teams, dan API token:
composer require laravel/jetstream
php artisan jetstream:install livewire
php artisan migrate
npm install && npm run build| Aspek | Breeze | Jetstream |
|---|---|---|
| Ukuran | Minimal | Lengkap |
| Teknologi | Blade + Tailwind | Livewire atau Inertia |
| Fitur ekstra | — | Teams, API tokens, profil lengkap |
| Cocok untuk | Proyek yang mau kontrol penuh | Proyek yang mau fitur siap pakai |
Note
Starter kit itu sumber belajar yang bagus, bukan kotak hitam: file auth yang dihasilkan bisa kalian baca dan modifikasi. Breeze bahkan menghasilkan controller sederhana (Auth\RegisteredUserController, Auth\AuthenticatedSessionController) yang mudah dipelajari — cocok untuk memahami alur auth di episode ini.
Kedua kit menghasilkan alur standar:
bcrypt), buat user, login otomatis.Di balik layar, Laravel memakai guard dan provider: guard web menyimpan user di session, provider users menentukan model User. Konfigurasi ada di config/auth.php. Untuk API, guard sanctum kita bahas di episode 18.
Fitur utama auth adalah membatasi akses. Route yang butuh login dipasangi middleware auth:
Route::get('/dashboard', function () {
return view('dashboard');
})->middleware('auth');Atau sekelompok route sekaligus:
Route::middleware('auth')->group(function () {
Route::get('/dashboard', [DashboardController::class, 'index']);
Route::resource('posts', PostController::class);
});Bukan itu saja: visitor yang belum login akan di-redirect ke halaman login, dan yang sudah login dilarang membuka /login (lewat middleware guest). Di Blade, kita bisa mengecek status dengan direktif @auth/@guest:
@auth
<a href="{{ route('dashboard') }}">Dashboard</a>
@endauth
@guest
<a href="{{ route('login') }}">Login</a>
@endguestUser yang login diakses di mana saja via helper auth()->user().
Kedua fitur diaktifkan dengan mengubah route breeze:install yang sudah ada, atau memakai route bawaan laravel/auth dari php artisan ui (legacy). Untuk memastikan route auth lengkap aktif:
php artisan route:list --name=password
php artisan route:list --name=verificationpassword_reset_tokens. Setelah reset, password lama otomatis tidak valid.User harus mengimplementasikan MustVerifyEmail. Route yang memerlukan verifikasi ditandai middleware verified:Route::get('/dashboard', ...)
->middleware(['auth', 'verified']);Tip
Selalu pasang verified setelah auth pada route yang menampilkan data pribadi. Di banyak tim, email verification ditunda sampai skala mengharuskan — tapi memaksakannya sejak awal (misalnya untuk aplikasi publik) lebih baik daripada mengubah alur belakangan.
Auth::attempt($credentials).RateLimiter untuk route login agar password yang salah berkali-kali tidak membuka pintu brute force (kita bahas di episode 12/16).Inti yang harus dibawa pulang:
auth, dan tampilkan status via @auth/@guest.verified untuk data pribadi.Auth::attempt() — jangan pernah bandingkan password manual.Di episode 11 selanjutnya kita akan membahas authorization — perbedaan Gates dan Policies, $this->authorize() di controller, direktif @can, dan dasar RBAC/roles di Laravel. Sampai jumpa di episode 11!