Web Development May 13, 2025 · 7 min read · 1 dilihat

Belajar Laravel 13 #8: Autentikasi User di Laravel 13 dengan Laravel Breeze

Setelah episode sebelumnya kita menyelesaikan database dengan Migration dan Eloquent ORM, kini saatnya menambahkan sistem autentikasi agar hanya user yang sudah login yang bisa mengakses fitur tertentu. Laravel Breeze adalah starter kit resmi paling ringan untuk pemula — cukup beberapa perintah, kamu langsung punya halaman login, register, dan reset password siap pakai. Di episode kedelapan ini, kita install Laravel Breeze, jelajahi kode yang dihasilkan otomatis, dan lindungi route CRUD dengan middleware authentication. Setelah ini, aplikasi kamu bukan hanya punya CRUD, tapi juga sistem keamanan yang production-ready.

IKHSAN MAULANA

IKHSAN MAULANA

Web, Android, and RPA Development

Belajar Laravel 13 #8: Autentikasi User di Laravel 13 dengan Laravel Breeze

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 --dev

Flag --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:install

Command 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 Authenticate dan RedirectIfAuthenticated
  • 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 migrate

Perintah 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 handling
  • register.blade.php — form register dengan name, email, password
  • forgot-password.blade.php — form untuk request reset password token
  • reset-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 serve

Buka 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>
@endauth

Helper 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 --}}
@endif

Membatasi 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 set MAIL_MAILER=log agar email tersimpan di storage/logs/laravel.log.
  • Ingin ubah layout login? — Edit file di resources/views/auth/ dan resources/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:fresh untuk 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! 🚀

Tags:

#Laravel 13 #Web Development #Login Register #Autentikasi #Laravel Breeze

Share this article:

IKHSAN MAULANA

Tentang Penulis

IKHSAN MAULANA

Web, Android, and RPA Development

I am an experienced IT programmer specializing in Web Development (Laravel/PHP), Android (Dart/Flutter), and RPA (UiPath). I love building clean, efficient solutions that solve real-world problems. With 4+ years of hands...

Download CV

Sebelum download, boleh kenalan dulu? Form ini opsional — kosongin juga gak apa-apa, langsung klik Download.