Authentication Bawaan Laravel
Pasang login, register, dan proteksi route dengan starter kit Breeze serta middleware auth.
Starter kit: Laravel Breeze
Laravel tidak memaksa satu cara autentikasi. Untuk project belajar, Breeze adalah pilihan paling ringan: Blade + Tailwind, tanpa SPA.
composer require laravel/breeze --dev
php artisan breeze:install blade
php artisan migrate
npm install && npm run devSetelah itu kamu langsung dapat route /login, /register, /forgot-password, halaman profil, dan verifikasi email. Semua view-nya ada di resources/views/auth dan bisa dikustom bebas.
Login manual dengan Auth::attempt
Kalau bikin form login sendiri, intinya cuma satu baris:
// app/Http/Controllers/Auth/LoginController.php
use Illuminate\Support\Facades\Auth;
public function login(Request $request)
{
$credentials = $request->validate([
'email' => 'required|email',
'password' => 'required',
]);
if (Auth::attempt($credentials, $request->boolean('remember'))) {
$request->session()->regenerate();
return redirect()->intended('/dashboard');
}
return back()->withErrors([
'email' => 'Email atau password salah.',
])->onlyInput('email');
}Auth::attempt otomatis memverifikasi password yang di-hash dengan Hash::make() saat register. Jangan pernah menyimpan password plain text.
Proteksi route dengan middleware auth
// routes/web.php
Route::middleware('auth')->group(function () {
Route::get('/dashboard', [DashboardController::class, 'index']);
Route::resource('posts', PostController::class);
});
// Kebalikannya: hanya untuk tamu (belum login)
Route::middleware('guest')->group(function () {
Route::get('/login', [LoginController::class, 'show']);
});Di Blade, cek status login dengan @auth dan @guest:
@auth
<p>Halo, {{ auth()->user()->nama }}!</p>
@endauthLogout yang benar
public function logout(Request $request)
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/');
}Catatan teknis:
$request->session()->regenerate()setelah login itu wajib untuk mencegah session fixation attack. Breeze sudah melakukannya otomatis, tapi kalau kamu menulis login manual, jangan sampai lupa baris ini.