Autentikasi dengan Breeze: Login Siap Pakai
Install Breeze untuk login, register, dan reset password instan.
Kenapa Tidak Menulis Auth Sendiri
Login terlihat sepele sampai kamu menulisnya sendiri: hashing password, session fixation, rate limiting brute force, remember-me cookie yang aman, reset password pakai token kedaluwarsa, verifikasi email. Satu saja luput, akun user jadi taruhannya. Laravel Breeze adalah starter kit resmi yang meng-generate seluruh alur itu sebagai kode biasa di project-mu, jadi kamu dapat keamanan yang benar SEKALIGUS contoh kode autentikasi yang idiomatik untuk dipelajari.
Instalasi
composer require laravel/breeze --dev
php artisan breeze:install blade
php artisan migrate
npm install && npm run devPerintah breeze:install menanyakan stack mana yang dipakai: blade (Blade + Tailwind, paling ringan), react/vue (Inertia), atau api (cuma route Sanctum untuk SPA). Pilih blade kalau kamu masih di tahap belajar. Setelah install, yang kamu dapat:
GET /login,POST /login,POST /logoutGET /register,POST /register- Lupa password + reset via email (
/forgot-password,/reset-password/{token}) - Verifikasi email (
/verify-email) - Route
/dashboardcontoh yang diproteksi middlewareauth
Pelajari Kode Hasil Generate
Ini bagian paling berharga dari Breeze. Semua controller ada di app/Http/Controllers/Auth/ dan view di resources/views/auth/. Buka LoginRequest.php dan perhatikan tiga hal:
// app/Http/Requests/Auth/LoginRequest.php (disederhanakan)
public function authenticate(): void
{
$this->ensureIsNotRateLimited(); // throttle: 5x per menit per email+IP
if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) {
RateLimiter::hit($this->throttleKey());
throw ValidationException::withMessages([
'email' => trans('auth.failed'),
]);
}
RateLimiter::clear($this->throttleKey());
}Pertama, rate limiting brute force sudah built-in: 5 percobaan gagal per menit per kombinasi email dan IP. Kedua, Auth::attempt() menerima parameter kedua $remember untuk cookie remember-me yang aman. Ketiga, pesan error sengaja generik ("kredensial tidak cocok") supaya attacker tidak bisa menebak email mana yang terdaftar.
Lalu lihat AuthenticatedSessionController@store:
public function store(LoginRequest $request): RedirectResponse
{
$request->authenticate();
$request->session()->regenerate(); // cegah session fixation
return redirect()->intended(RouteServiceProvider::HOME);
}redirect()->intended() mengembalikan user ke halaman yang ia tuju sebelum dilempar ke login, pola UX yang benar untuk halaman terproteksi.
Kustomisasi
Karena ini kode biasa (bukan package tertutup), semua bisa diubah. Mau redirect setelah login ke /beranda bukan /dashboard? Ubah konstanta HOME di app/Providers/RouteServiceProvider.php. Mau tambah field saat register (misal username)? Edit RegisteredUserController@store dan view register.blade.php. Proteksi route tinggal tempel middleware:
// routes/web.php
Route::middleware(['auth', 'verified'])->group(function () {
Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
});Jebakan Umum
Pertama, lupa menjalankan npm install && npm run dev untuk stack Blade. View Breeze memakai Tailwind, tanpa build asset halaman login tampil berantakan. Kedua, fitur reset password dan verifikasi email butuh mailer yang berfungsi. Di local, set MAIL_MAILER=log di .env supaya email "terkirim" ke storage/logs/laravel.log dan kamu bisa klik link tokennya dari sana.
Ketiga, memakai Breeze untuk API murni. Breeze stack blade/react/vue itu session-based untuk browser. Kalau client-mu aplikasi mobile atau SPA terpisah, yang kamu butuhkan adalah Sanctum token (ada modul tersendiri), bukan memaksa session Breeze lewat API.
Catatan teknis: Anggap Breeze sebagai guru, bukan sekadar scaffolding. Setelah install, luangkan 30 menit membaca
app/Http/Controllers/Auth/dari atas sampai bawah. Pola di sana (Form Request untuk login, rate limiter, regenerate session, intended redirect) adalah pola yang harus kamu tiru setiap kali menulis autentikasi manual di project tanpa Breeze.
Tantangan
Dashboard Pribadi
Install Breeze di project latihan. Buat halaman /dashboard yang menampilkan nama user login + jumlah post miliknya. Pastikan tamu (belum login) tidak bisa akses.