laravelauthloginMenengah3 mnt baca

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.

bash
composer require laravel/breeze --dev
php artisan breeze:install blade
php artisan migrate
npm install && npm run dev

Setelah 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:

php
// 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

php
// 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:

blade
@auth
    <p>Halo, {{ auth()->user()->nama }}!</p>
@endauth

Logout yang benar

php
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.