Pada episode sebelumnya tentang Database, Migration, dan Eloquent ORM, kita berhasil membuat tabel posts dan melakukan CRUD dasar lewat Tinker. Tapi saat ini, siapa saja bisa akses dan ubah data tersebut — jelas tidak aman untuk aplikasi nyata. Kita butuh sistem autentikasi: login, register, dan proteksi route.
Laravel menyediakan beberapa starter kit untuk auth, tapi yang paling cocok untuk pemula adalah Laravel Breeze. Cukup beberapa perintah artisan, kamu langsung dapat halaman login, register, reset password, dan middleware proteksi yang siap pakai.
Pilihan Autentikasi di Laravel 13
Sebelum jump ke Breeze, penting kamu tahu ada tiga pilihan utama untuk auth di Laravel:
- Laravel Breeze — minimal dan lightweight, cocok untuk pemula dan project small-to-medium. Generate model User, migration, controller login/register, dan UI Blade. Code-nya simple dan mudah dipahami.
- Laravel Fortify — backend authentication logic saja (API-first), tanpa UI frontend. Cocok kalau kamu pakai SPA atau mobile app yang butuh API endpoint khusus.
- Laravel Jetstream — full-featured, include team management, two-factor authentication, API token, dan session management. Lebih berat, cocok untuk aplikasi enterprise.
Untuk tahap pembelajaran, Breeze adalah pilihan paling tepat. Ringan, fitur lengkap untuk kebutuhan dasar, dan code-nya mudah dimodifikasi.
Install Laravel Breeze
Pastikan kamu sudah punya project Laravel 13 dari episode-episode sebelumnya. Berikut langkah instalasi.
Step 1: Install package Breeze via Composer
composer require laravel/breeze --devFlag --dev menempatkan package di dev dependencies karena hanya dibutuhkan saat development. Di production, kode yang sudah di-generate tidak butuh package ini lagi.
Step 2: Generate struktur Breeze
php artisan breeze:installCommand ini akan tampilkan prompt interaktif. Pilih Blade with Alpine untuk pemula (paling simple). Setelah itu, artisan akan auto-generate:
- Controller untuk login, register, dan password reset di
app/Http/Controllers/Auth/ - Middleware
AuthenticatedanRedirectIfAuthenticated - View Blade untuk halaman login, register, dan dashboard di
resources/views/auth/ - Route-route auth di file
routes/auth.php - Migration untuk tabel users dan password_reset_tokens
Step 3: Install dependency frontend dan jalankan migration
npm install
npm run dev
php artisan migratePerintah npm install mengunduh semua package frontend (Tailwind CSS, Alpine.js). npm run dev meng-compile asset CSS dan JS. php artisan migrate menjalankan migration users dan sessions ke database kamu.
Selesai! Sekarang akses http://localhost:8000/register dan kamu akan lihat halaman register siap pakai.
Menjelajahi Kode yang Di-generate Breeze
Sekarang mari kita lihat apa saja yang dibuat Breeze.
1. Model User dan Migration
Di app/Models/User.php, kamu akan lihat model User yang extend Authenticatable. Model ini sudah include hashing password, remember token, dan method yang diperlukan untuk auth. Property $fillable sudah diisi name, email, dan password.
Di folder database/migrations/, ada migration create_users_table dengan kolom name, email, password, email_verified_at, dan remember_token.
2. Route Auth
Di routes/auth.php, semua route untuk login, register, password reset sudah didefinisikan. File ini di-require otomatis di routes/web.php. Struktur route-nya:
Route::middleware('guest')->group(function () {
Route::get('register', [RegisteredUserController::class, 'create'])->name('register');
Route::post('register', [RegisteredUserController::class, 'store']);
Route::get('login', [AuthenticatedSessionController::class, 'create'])->name('login');
Route::post('login', [AuthenticatedSessionController::class, 'store']);
});
Route::middleware('auth')->group(function () {
Route::post('logout', [AuthenticatedSessionController::class, 'destroy'])->name('logout');
});Middleware guest artinya route hanya bisa diakses user yang BELUM login (masuk akal, kan? Yang sudah login tidak perlu lihat halaman register lagi). Middleware auth artinya hanya user yang sudah login yang bisa akses.
3. View Login dan Register
Di folder resources/views/auth/, kamu akan lihat:
login.blade.php— form login dengan validation error handlingregister.blade.php— form register dengan name, email, passwordforgot-password.blade.php— form untuk request reset password tokenreset-password.blade.php— form untuk set password baru
Semua view sudah styled dengan Tailwind CSS, jadi tampilannya modern dan responsive. Kamu bisa modifikasi sesuai branding project kamu nanti.
Proteksi Route CRUD dengan Middleware Auth
Sekarang kembali ke project CRUD kita dari episode #7. Kita perlu lock semua route CRUD agar hanya user yang sudah login yang bisa akses.
Di file routes/web.php, ubah route CRUD menjadi seperti ini:
Route::middleware('auth')->group(function () {
Route::resource('posts', PostController::class);
});Middleware auth akan intercept semua request ke route ini. Jika user belum login, Laravel otomatis redirect ke halaman login. Simple sekali!
Alternatif lain, kamu bisa protect route langsung di controller via constructor:
public function __construct()
{
$this->middleware('auth');
}Atau hanya method tertentu saja:
$this->middleware('auth')->only(['create', 'store', 'edit', 'update', 'destroy']);Dengan begitu, method index dan show tetap bisa diakses publik (read-only), sementara create/edit/delete butuh login.
Test Flow Register dan Login
Jalankan development server:
php artisan serveBuka browser ke http://localhost:8000/register. Kamu akan lihat halaman register yang clean dengan input field name, email, password, dan password confirmation.
Coba daftar akun baru. Setelah submit, Laravel Breeze akan auto-hash password pakai bcrypt, validate email format, dan create user di database. Kamu akan langsung di-redirect ke /dashboard (halaman default untuk authenticated user).
Sekarang coba akses http://localhost:8000/posts. Karena sudah login, kamu bisa akses CRUD post tanpa masalah. Coba logout dari menu pojok kanan atas, lalu akses ulang /posts — Laravel akan otomatis redirect ke halaman login. Berhasil!
Menggunakan Auth Helper di Blade View
Di Blade view, kamu bisa cek apakah user sedang login atau tidak dengan directive @auth dan @guest:
@auth
<p>Selamat datang, {{ auth()->user()->name }}!</p>
<form action="{{ route('logout') }}" method="POST">
@csrf
<button type="submit">Logout</button>
</form>
@else
<a href="{{ route('login') }}">Login di sini</a>
@endauthHelper auth()->user() mengembalikan instance User yang sedang login. Kamu bisa akses property apapun dari model User, misalnya auth()->user()->email atau auth()->user()->id.
Untuk cek hanya status login (return boolean), pakai auth()->check():
@if(auth()->check())
{{-- User sudah login --}}
@endifMembatasi Akses per User (Authorization)
Breeze hanya handle autentikasi (siapa user-nya?). Authorization (apakah user boleh akses sesuatu?) adalah tanggung jawab kamu. Misalnya, user A hanya boleh edit post miliknya sendiri, bukan post user B.
Cara paling simple, tambahkan logic check di controller:
public function edit($id)
{
$post = Post::findOrFail($id);
if ($post->user_id !== auth()->id()) {
abort(403, 'Unauthorized');
}
return view('posts.edit', compact('post'));
}Untuk authorization yang lebih terstruktur, Laravel menyediakan Policy dan Gate — topik yang akan kita bahas di episode mendatang.
Tips Praktis & Troubleshooting
- Forgot password tidak kirim email? — Pastikan SMTP sudah di-config di
.env(MAIL_MAILER, MAIL_HOST, MAIL_PORT, MAIL_USERNAME, MAIL_PASSWORD). Untuk testing lokal, pakai Mailtrap atau setMAIL_MAILER=logagar email tersimpan distorage/logs/laravel.log. - Ingin ubah layout login? — Edit file di
resources/views/auth/danresources/views/layouts/. Tailwind CSS sudah tersedia, cukup tambah class sesuai kebutuhan. - Migration error "table users already exists"? — Kemungkinan tabel users sudah dibuat sebelumnya. Jalankan
php artisan migrate:freshuntuk drop semua tabel dan migrate ulang (HATI-HATI: ini hapus semua data). - Password tidak ter-hash? — Breeze sudah handle hashing otomatis di RegisteredUserController. Tapi kalau kamu custom controller, jangan lupa pakai
Hash::make($password)atau cast'password' => 'hashed'di model User.
Kesimpulan
Laravel Breeze adalah cara tercepat menambahkan sistem autentikasi ke project Laravel 13 kamu. Lightweight, mudah dipahami, dan tidak perlu setup banyak boilerplate. Hanya beberapa perintah artisan, kamu sudah punya login, register, reset password, dan middleware auth yang siap pakai.
Sekarang aplikasi kamu sudah lengkap: route (episode #3), view (episode #4), controller (episode #5), database & CRUD (episode #6-7), dan autentikasi (episode #8). Project kamu siap dikembangkan lebih jauh dengan fitur-fitur advanced.
Di episode berikutnya, kita akan explore relationship antar model — bikin relasi user-to-post (one-to-many) sehingga setiap post punya author, dan implement authorization agar user hanya bisa edit post miliknya sendiri. Untuk referensi lengkap, cek dokumentasi resmi Laravel Starter Kits. Keep coding! 🚀