Tutorial Laravel #19: Authentication Dasar Laravel

1. Authentication di Laravel

Laravel menyediakan beberapa cara untuk implementasi authentication. Cara tercepat adalah menggunakan Laravel Breeze - starter kit resmi yang generate kode auth siap pakai. Tapi kita juga bisa buat manual untuk pemahaman yang lebih dalam.

2. Menggunakan Laravel Breeze (Recommended)

# Install Breeze
composer require laravel/breeze --dev

# Install dengan stack Blade (paling sederhana)
php artisan breeze:install blade

# Install dependency dan kompilasi asset
npm install && npm run dev

# Jalankan migration
php artisan migrate

Breeze otomatis generate: halaman login, register, lupa password, verifikasi email, profil user, dan middleware auth. Tinggal pakai!

3. Membuat Auth Manual - Login

<?php
// app/Http/Controllers/Auth/LoginController.php
namespace AppHttpControllersAuth;

use AppHttpControllersController;
use IlluminateHttpRequest;
use IlluminateSupportFacadesAuth;

class LoginController extends Controller
{
    public function showForm()
    {
        return view('auth.login');
    }

    public function login(Request $request)
    {
        $credentials = $request->validate([
            'email'    => 'required|email',
            'password' => 'required',
        ]);

        $remember = $request->boolean('remember');

        if (Auth::attempt($credentials, $remember)) {
            $request->session()->regenerate();

            return redirect()->intended(route('dashboard'));
        }

        return back()
            ->withErrors(['email' => 'Email atau password salah.'])
            ->onlyInput('email');
    }

    public function logout(Request $request)
    {
        Auth::logout();
        $request->session()->invalidate();
        $request->session()->regenerateToken();
        return redirect('/');
    }
}

4. Membuat Auth Manual - Register

public function register(Request $request)
{
    $validated = $request->validate([
        'name'                  => 'required|string|max:100',
        'email'                 => 'required|email|unique:users',
        'password'              => 'required|min:8|confirmed',
    ]);

    $user = User::create([
        'name'     => $validated['name'],
        'email'    => $validated['email'],
        'password' => bcrypt($validated['password']),
    ]);

    Auth::login($user);

    return redirect()->route('dashboard');
}

5. Mengambil Data User yang Login

// Di controller
$user = Auth::user();
$user = auth()->user();
$id   = Auth::id();
$id   = auth()->id();

// Cek status login
if (Auth::check()) { /* sudah login */ }
if (auth()->guest()) { /* belum login */ }

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

@guest
    <a href="{{ route('login') }}">Login</a>
@endguest

6. Protect Route dengan Middleware Auth

// routes/web.php
Route::middleware('auth')->group(function () {
    Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
    Route::resource('artikel', ArtikelController::class);
    Route::get('/profile', [ProfileController::class, 'show'])->name('profile');
});

// Route untuk guest saja (belum login)
Route::middleware('guest')->group(function () {
    Route::get('/login', [LoginController::class, 'showForm'])->name('login');
    Route::post('/login', [LoginController::class, 'login']);
    Route::get('/register', [RegisterController::class, 'showForm'])->name('register');
    Route::post('/register', [RegisterController::class, 'register']);
});

7. Konfigurasi Redirect

// app/Http/Middleware/Authenticate.php
protected function redirectTo(Request $request): ?string
{
    // Jika bukan request yang expect JSON, redirect ke login
    return $request->expectsJson() ? null : route('login');
}

8. Ringkasan

  • Gunakan Laravel Breeze untuk auth siap pakai yang bisa langsung dikustomisasi
  • Auth::attempt() untuk login, Auth::logout() untuk logout
  • auth()->user() untuk mengambil data user yang sedang login
  • Protect halaman dengan middleware auth di route

Tutorial berikutnya membahas authorization: Gate dan Policy di Laravel.


ariq fadhil

Im Ariq Tech, a Top Rated Fullstack Developer with 5+ years of experience, delivering high-quality solutions across 50+ projects.