MAXBY SSD 512GB/1TB M.2 NVMe PCIe Gen4x4 SSD NVMe Gen3/1TB PCIe 4.0 Garansi Resmi 5 Tahun Original

Laravel Authentication: Memahami Login, Session, dan Authorization

Laravel Authentication merupakan bagian penting dalam aplikasi web yang membutuhkan sistem akun pengguna. Authentication memastikan aplikasi dapat mengetahui siapa pengguna yang sedang mengakses sistem, sedangkan authorization menentukan tindakan apa saja yang boleh dilakukan oleh pengguna tersebut.

Dalam aplikasi Laravel, proses authentication tidak hanya berkaitan dengan form login. Di dalamnya terdapat beberapa konsep seperti credential verification, session, logout, authentication middleware, authorization, Gates, dan Policies.

Memahami perbedaan authentication dan authorization sangat penting. Authentication menjawab pertanyaan “Siapa Anda?”, sedangkan authorization menjawab “Apa yang boleh Anda lakukan?”.

Artikel ini membahas cara kerja Laravel Authentication, proses login dan logout, penggunaan session, middleware auth, mengambil user yang sedang login, membuat authentication sederhana, serta memahami authorization menggunakan Gates dan Policies.

Apa Itu Laravel Authentication?

Authentication adalah proses untuk memverifikasi identitas pengguna.

Contohnya ketika user memasukkan:

Email    : [email protected]
Password : ********

Aplikasi perlu memeriksa apakah credential tersebut cocok dengan akun yang terdaftar.

Jika valid, aplikasi dapat membuat status authentication sehingga request berikutnya mengetahui bahwa pengguna tersebut sudah login.

Secara sederhana, alurnya adalah:

User
 ↓
Login Form
 ↓
Credential
 ↓
Laravel Authentication
 ↓
Verifikasi User
 ↓
Session / Authentication State
 ↓
User dianggap Login

Authentication vs Authorization

Authentication dan authorization sering dianggap sama, padahal keduanya memiliki fungsi berbeda.

KonsepPertanyaanContoh
AuthenticationSiapa user ini?User berhasil login
AuthorizationApa yang boleh dilakukan user?User boleh menghapus artikel

Misalnya seorang user berhasil login. Itu berarti user telah melalui authentication.

Namun, belum tentu user tersebut boleh membuka halaman administrator atau menghapus data pengguna lain. Pemeriksaan tersebut merupakan bagian dari authorization.

Bagaimana Laravel Authentication Bekerja?

Dalam aplikasi berbasis session, proses authentication dapat digambarkan sebagai berikut:

Browser
   ↓
POST /login
   ↓
Login Controller / Action
   ↓
Cari User
   ↓
Verifikasi Password
   ↓
Authentication Berhasil?
   ├── Tidak → Kembali dengan Error
   │
   └── Ya
        ↓
   Simpan Authentication State
        ↓
   Redirect ke Dashboard
        ↓
Request berikutnya
        ↓
Middleware auth
        ↓
User dikenali

Detail implementasinya dapat berbeda tergantung starter kit dan authentication stack yang digunakan, tetapi konsep dasarnya tetap sama.

Model User Laravel

Pada aplikasi Laravel, user biasanya direpresentasikan menggunakan model:

App\Models\User

Model tersebut umumnya terhubung dengan tabel users.

Struktur sederhana tabel user dapat berisi:

id
name
email
password
remember_token
created_at
updated_at

Kolom yang tersedia dapat berbeda tergantung kebutuhan aplikasi.

Password Tidak Boleh Disimpan sebagai Plain Text

Salah satu prinsip paling penting dalam authentication adalah jangan menyimpan password dalam bentuk plain text.

Laravel menyediakan fasilitas hashing password.

Contohnya:

use Illuminate\Support\Facades\Hash;

$hashedPassword = Hash::make($password);

Hasil hashing kemudian dapat disimpan pada database.

Ketika user login, aplikasi tidak perlu membandingkan password secara langsung. Laravel dapat memverifikasi password terhadap hash yang tersimpan.

if (Hash::check($password, $user->password)) {
    // Password benar
}

Dengan pendekatan tersebut, aplikasi tidak perlu menyimpan password asli pengguna.

Membuat User dengan Password yang Aman

Contoh ketika membuat user secara manual:

use App\Models\User;
use Illuminate\Support\Facades\Hash;

$user = User::create([
    'name' => 'Budi',
    'email' => '[email protected]',
    'password' => Hash::make('password-rahasia'),
]);

Password yang disimpan pada database merupakan hasil hashing, bukan password asli.

Dalam aplikasi production, jangan menggunakan password contoh seperti password-rahasia sebagai credential nyata.

Proses Login

Login biasanya menerima email atau username dan password.

Contoh pendekatan menggunakan Auth::attempt():

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

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

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

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

    return back()->withErrors([
        'email' => 'Credential yang diberikan tidak cocok.',
    ]);
}

Pada contoh tersebut, Laravel mencoba melakukan authentication menggunakan credential yang diberikan.

Jika berhasil, session diregenerasi sebelum user diarahkan ke halaman tujuan.

Mengapa Session Perlu Diregenerasi Setelah Login?

Setelah authentication berhasil, session ID sebaiknya diregenerasi.

$request->session()->regenerate();

Regenerasi session merupakan bagian penting dari perlindungan terhadap session fixation.

Dengan demikian, session identifier yang digunakan setelah login tidak tetap menggunakan identifier sebelum authentication.

Apa Itu Session?

Session digunakan untuk mempertahankan state antara satu HTTP request dan request berikutnya.

HTTP pada dasarnya bersifat stateless. Artinya, setiap request tidak secara otomatis mengetahui request sebelumnya.

Session membantu aplikasi mempertahankan informasi seperti:

  • status login;
  • flash message;
  • preferensi tertentu;
  • data sementara;
  • informasi state lain sesuai kebutuhan aplikasi.

Dalam authentication berbasis session, session membantu aplikasi mengenali user yang sudah login pada request berikutnya.

Mengambil User yang Sedang Login

Laravel menyediakan beberapa cara untuk mengambil user yang sedang terautentikasi.

Salah satunya:

use Illuminate\Support\Facades\Auth;

$user = Auth::user();

Atau menggunakan helper:

$user = auth()->user();

Pada controller atau middleware, user juga dapat diambil dari request:

$user = $request->user();

Jika tidak ada user yang terautentikasi, nilai yang dikembalikan dapat berupa null.

Mengecek Apakah User Sudah Login

Untuk memeriksa status authentication:

if (Auth::check()) {
    // User sudah login
}

Atau:

if (auth()->check()) {
    // User sudah login
}

Jika hanya membutuhkan pemeriksaan boolean, Auth::check() lebih tepat daripada mengambil seluruh object user.

Middleware auth

Laravel menyediakan middleware auth untuk membatasi route agar hanya dapat diakses oleh user yang sudah terautentikasi.

Contoh:

Route::get('/dashboard', DashboardController::class)
    ->middleware('auth');

Jika user belum login, request tidak akan langsung diteruskan ke controller.

Middleware dapat menangani request tersebut sesuai konfigurasi authentication aplikasi.

Menggunakan Middleware auth pada Route Group

Jika beberapa halaman membutuhkan authentication, gunakan route group:

Route::middleware('auth')->group(function () {
    Route::get('/dashboard', DashboardController::class);
    Route::get('/profile', ProfileController::class);
    Route::get('/settings', SettingsController::class);
});

Dengan demikian, semua route dalam group membutuhkan user yang sudah login.

Logout dari Laravel

Logout bertujuan mengakhiri authentication state user.

Contoh:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

public function logout(Request $request)
{
    Auth::logout();

    $request->session()->invalidate();
    $request->session()->regenerateToken();

    return redirect('/login');
}

Setelah Auth::logout(), session di-invalidate dan CSRF token diregenerasi.

Pola tersebut membantu memastikan session authentication lama tidak tetap digunakan setelah logout.

Mengapa Session Di-invalidate Saat Logout?

Logout bukan hanya sekadar mengubah status user.

Session yang digunakan selama authentication sebaiknya juga diakhiri:

$request->session()->invalidate();

Setelah itu, token CSRF dapat diregenerasi:

$request->session()->regenerateToken();

Ini merupakan pola yang lebih aman untuk proses logout berbasis session.

Remember Me

Laravel juga mendukung konsep remember me pada authentication berbasis session.

Misalnya login menggunakan:

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

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

Parameter kedua pada Auth::attempt() dapat digunakan untuk menentukan apakah user ingin diingat.

Form login dapat menyediakan checkbox:

<label>
    <input type="checkbox" name="remember">
    Remember me
</label>

Implementasi detail cookie dan persistence bergantung pada konfigurasi authentication Laravel yang digunakan.

Guest Middleware

Selain middleware auth, aplikasi juga sering membutuhkan middleware untuk user yang belum login.

Middleware guest dapat digunakan pada halaman seperti login atau register.

Route::middleware('guest')->group(function () {
    Route::get('/login', [LoginController::class, 'show']);
    Route::get('/register', [RegisterController::class, 'show']);
});

Dengan begitu, user yang sudah login dapat diarahkan keluar dari halaman yang hanya relevan bagi guest sesuai konfigurasi aplikasi.

Authentication untuk API

Authentication berbasis session cocok untuk banyak aplikasi web yang menggunakan browser.

Untuk API, mekanismenya dapat berbeda. Laravel dapat digunakan bersama token-based authentication, misalnya menggunakan Laravel Sanctum.

Contoh route API yang membutuhkan authentication Sanctum:

Route::middleware('auth:sanctum')->group(function () {
    Route::get('/profile', function (Request $request) {
        return $request->user();
    });
});

Request yang tidak memenuhi authentication tidak dapat mengakses endpoint tersebut.

Session Authentication vs Token Authentication

Authentication berbasis session dan token memiliki pola penggunaan yang berbeda.

AspekSessionToken
Umum digunakan untukWeb browserAPI dan client tertentu
StateDisimpan pada server/session infrastructureCredential token digunakan oleh client
CookieUmumnya digunakanTergantung implementasi
LogoutMengakhiri session authenticationDapat melibatkan revocation/deletion token

Pemilihan mekanisme authentication sebaiknya mengikuti jenis client dan arsitektur aplikasi.

Apa Itu Authorization?

Setelah user berhasil login, aplikasi masih harus menentukan apakah user tersebut boleh melakukan suatu tindakan.

Inilah yang disebut authorization.

Misalnya:

User A
Login: Ya
Role: Admin
Boleh menghapus user: Ya

User B
Login: Ya
Role: Editor
Boleh menghapus user: Tidak

Kedua user telah melewati authentication, tetapi hak aksesnya berbeda.

Authorization dengan Gate

Laravel menyediakan Gate untuk mendefinisikan aturan authorization berbasis kemampuan atau tindakan tertentu.

Contoh sederhana:

use Illuminate\Support\Facades\Gate;

Gate::define('delete-post', function ($user, $post) {
    return $user->id === $post->user_id;
});

Gate tersebut menentukan bahwa user hanya dapat menghapus post miliknya sendiri.

Pemeriksaan dapat dilakukan:

if (Gate::allows('delete-post', $post)) {
    // User boleh menghapus post
}

Jika tidak memiliki izin:

if (Gate::denies('delete-post', $post)) {
    abort(403);
}

Authorization dengan Policy

Jika aturan authorization berkaitan erat dengan model tertentu, Policy sering menjadi pilihan yang lebih terstruktur.

Misalnya aplikasi memiliki model:

Post

Policy dapat dibuat menggunakan Artisan:

php artisan make:policy PostPolicy --model=Post

Policy dapat memiliki method seperti:

public function update(User $user, Post $post): bool
{
    return $user->id === $post->user_id;
}

Aturan tersebut menyatakan bahwa user hanya boleh mengubah post miliknya sendiri.

Gate vs Policy

Keduanya sama-sama digunakan untuk authorization, tetapi memiliki pola penggunaan yang berbeda.

GatePolicy
Cocok untuk aturan kemampuan tertentuCocok untuk authorization berbasis model
Aturan dapat berdiri sendiriAturan dikelompokkan dalam class Policy
Praktis untuk aturan sederhanaCocok untuk aplikasi dengan banyak resource

Pada aplikasi yang besar, Policies dapat membantu mengorganisasi authorization berdasarkan resource.

Authorization pada Controller

Authorization dapat dilakukan sebelum menjalankan business logic.

Contohnya menggunakan Gate:

if (Gate::denies('update-post', $post)) {
    abort(403);
}

$post->update($data);

Dengan begitu, hanya user yang memiliki izin yang dapat melanjutkan proses update.

Authorization pada Blade

Pada Blade, kondisi authorization juga dapat digunakan untuk menentukan apakah elemen tertentu ditampilkan.

Contohnya:

@can('update', $post)
    <a href="{{ route('posts.edit', $post) }}">
        Edit
    </a>
@endcan

Namun, menyembunyikan tombol di UI bukan pengganti authorization pada server.

Endpoint tetap harus melakukan pemeriksaan permission.

Authentication Bukan Pengganti Authorization

Kesalahan yang cukup umum adalah menganggap:

User sudah login
=
User boleh melakukan semua hal

Padahal keduanya berbeda.

Middleware:

->middleware('auth')

hanya memastikan request berasal dari user yang sudah terautentikasi.

Untuk memastikan user memiliki permission tertentu, aplikasi membutuhkan authorization.

Contoh Role-Based Authorization

Aplikasi sederhana dapat memiliki kolom:

role

dengan nilai:

admin
editor
user

Contoh pemeriksaan:

if ($request->user()->role !== 'admin') {
    abort(403);
}

Untuk aplikasi kecil, pendekatan sederhana seperti ini mungkin cukup.

Namun, aplikasi dengan permission yang kompleks sebaiknya menggunakan struktur authorization yang lebih terorganisasi, seperti Gates, Policies, atau permission system yang memang dirancang untuk kebutuhan tersebut.

Contoh Route Authentication dan Authorization

Misalnya aplikasi memiliki halaman admin.

Route dapat menggunakan authentication:

Route::middleware('auth')->group(function () {
    Route::get('/dashboard', DashboardController::class);

    Route::get('/admin/users', [AdminUserController::class, 'index']);
});

Authentication memastikan user telah login.

Kemudian authorization menentukan apakah user memiliki hak akses administrator.

public function index(Request $request)
{
    abort_unless(
        $request->user()->is_admin,
        403
    );

    return view('admin.users');
}

Untuk aplikasi yang lebih besar, aturan tersebut sebaiknya dipindahkan ke Policy atau mekanisme authorization yang lebih terstruktur.

Validasi Login

Data login tetap perlu divalidasi sebelum digunakan.

$credentials = $request->validate([
    'email' => ['required', 'email'],
    'password' => ['required', 'string'],
]);

Validasi membantu memastikan input memiliki format yang diharapkan sebelum masuk ke proses authentication.

Validasi bukan pengganti authentication. Keduanya memiliki fungsi berbeda.

Jangan Memberikan Error Login yang Terlalu Detail

Ketika login gagal, hindari memberikan informasi yang membantu attacker mengetahui apakah email tertentu terdaftar.

Misalnya pesan seperti:

Email tidak ditemukan.

dapat memberikan informasi tambahan.

Pesan generik seperti:

Credential yang diberikan tidak cocok.

biasanya lebih baik untuk mengurangi informasi yang dapat digunakan dalam user enumeration.

Rate Limiting pada Login

Endpoint login merupakan salah satu endpoint yang perlu mendapatkan perhatian terhadap percobaan login berulang.

Rate limiting dapat membantu mengurangi risiko brute-force attack.

Laravel menyediakan mekanisme rate limiting yang dapat digunakan pada route atau proses authentication sesuai kebutuhan aplikasi.

Contoh sederhana pada route:

Route::middleware('throttle:5,1')->post(
    '/login',
    [LoginController::class, 'login']
);

Konfigurasi rate limit harus disesuaikan dengan kebutuhan aplikasi agar tidak mengganggu user yang sah.

CSRF pada Login dan Form Web

Untuk form berbasis session, Laravel menyediakan perlindungan CSRF.

Form Blade biasanya menyertakan:

<form method="POST" action="{{ route('login') }}">
    @csrf

    <input
        type="email"
        name="email"
        required
    >

    <input
        type="password"
        name="password"
        required
    >

    <button type="submit">
        Login
    </button>
</form>

Directive @csrf menghasilkan token yang digunakan untuk membantu melindungi request POST dari serangan Cross-Site Request Forgery.

Cookie dan Session Authentication

Pada authentication berbasis session, browser biasanya menyimpan cookie yang berkaitan dengan session.

Secara konseptual:

Browser
   ↓
Session Cookie
   ↓
Laravel
   ↓
Session Storage
   ↓
Authentication State
   ↓
User

Cookie tidak seharusnya digunakan untuk menyimpan password.

Konfigurasi cookie dan session harus memperhatikan keamanan seperti HTTPS, secure cookie, dan pengaturan yang sesuai dengan deployment.

HTTPS untuk Authentication

Authentication sebaiknya selalu dilakukan melalui HTTPS, terutama ketika aplikasi memproses password, session cookie, dan data akun.

HTTPS membantu melindungi komunikasi antara browser dan server dari penyadapan serta manipulasi jaringan.

Pada production, pastikan seluruh halaman authentication menggunakan HTTPS dan konfigurasi aplikasi sesuai dengan environment secure.

Session Driver Laravel

Session dapat disimpan menggunakan berbagai mekanisme yang tersedia dalam konfigurasi Laravel, tergantung versi dan kebutuhan aplikasi.

Konfigurasi session berada pada:

config/session.php

Environment dapat menentukan driver session sesuai konfigurasi aplikasi.

Contoh:

SESSION_DRIVER=file

Untuk aplikasi dengan kebutuhan tertentu, session dapat menggunakan storage lain yang didukung oleh Laravel.

Pemilihan session storage menjadi lebih penting ketika aplikasi berjalan pada beberapa application server.

Authentication pada Multi-Server

Misalnya aplikasi berjalan pada dua server:

             Load Balancer
                  ↓
          ┌───────┴───────┐
          ↓               ↓
     Server A          Server B

Jika session hanya disimpan secara lokal pada masing-masing server, aplikasi perlu memastikan request user tetap mendapatkan session yang benar atau menggunakan shared session storage sesuai arsitektur.

Shared storage dapat membantu ketika request yang berbeda diarahkan ke application server yang berbeda.

Regenerate Session ID

Selain setelah login, session ID juga dapat diregenerasi ketika diperlukan.

Contoh:

$request->session()->regenerate();

Namun, session regeneration sebaiknya digunakan sesuai lifecycle authentication dan kebutuhan aplikasi, bukan secara sembarangan pada setiap request.

Authentication Starter Kit

Untuk aplikasi Laravel modern, developer tidak selalu perlu membangun seluruh authentication flow dari nol.

Laravel memiliki berbagai starter kit dan package resmi yang dapat membantu menyediakan fitur authentication seperti:

  • login;
  • registration;
  • password reset;
  • email verification;
  • authentication UI;
  • two-factor authentication pada stack tertentu.

Pilihan starter kit bergantung pada kebutuhan frontend dan arsitektur aplikasi.

Menggunakan starter kit dapat mengurangi risiko kesalahan ketika membangun fitur authentication dasar sendiri.

Password Reset

Aplikasi authentication yang lengkap biasanya membutuhkan fitur forgot password.

Alur sederhananya:

User lupa password
       ↓
Masukkan email
       ↓
Laravel membuat reset token
       ↓
Kirim link reset
       ↓
User membuka link
       ↓
Password baru
       ↓
Hash password
       ↓
Simpan password baru

Password reset sebaiknya menggunakan mekanisme yang tersedia pada Laravel atau starter kit yang telah dirancang untuk kebutuhan tersebut daripada membuat sistem token sendiri tanpa memahami aspek keamanannya.

Email Verification

Beberapa aplikasi membutuhkan user memverifikasi alamat email setelah registration.

Route tertentu dapat dibatasi untuk user yang sudah melakukan verifikasi email.

Contoh penggunaan middleware:

Route::middleware(['auth', 'verified'])->group(function () {
    Route::get('/dashboard', DashboardController::class);
});

Dengan demikian, user harus login dan telah melakukan email verification sebelum mengakses route tersebut.

Two-Factor Authentication

Untuk aplikasi yang membutuhkan keamanan lebih tinggi, authentication dapat dilengkapi dengan two-factor authentication atau 2FA.

Konsepnya:

Password
   +
Second Factor
   ↓
Authentication berhasil

Second factor dapat menggunakan mekanisme seperti authenticator application atau metode lain yang sesuai dengan authentication stack.

2FA sangat berguna untuk akun administrator dan akun yang memiliki akses penting.

Kesalahan Umum dalam Authentication Laravel

Menyimpan Password Plain Text

Jangan pernah menyimpan:

'password' => $request->password

Gunakan hashing:

'password' => Hash::make($request->password)

Tidak Meregenerasi Session Setelah Login

Gunakan:

$request->session()->regenerate();

setelah authentication berhasil.

Logout Tanpa Mengakhiri Session

Gunakan pola logout yang juga melakukan invalidasi session.

Menganggap Login Berarti Memiliki Semua Permission

Authentication harus dipisahkan dari authorization.

Hanya Menyembunyikan Tombol Admin

Menyembunyikan tombol menggunakan Blade bukan security boundary.

Endpoint server tetap harus melakukan authorization.

Menaruh Password atau Secret pada Log

Jangan mencatat password, token authentication, session credential, atau secret ke log aplikasi.

Praktik Terbaik Laravel Authentication

Untuk membangun authentication yang lebih aman, perhatikan beberapa prinsip berikut:

  • gunakan hashing password;
  • gunakan HTTPS pada production;
  • regenerasi session setelah login;
  • invalidate session ketika logout;
  • gunakan CSRF protection untuk form berbasis session;
  • gunakan rate limiting pada endpoint sensitif;
  • pisahkan authentication dan authorization;
  • gunakan Policies atau Gates untuk aturan authorization;
  • hindari informasi error login yang terlalu detail;
  • jangan mencatat credential ke log;
  • gunakan starter kit resmi atau solusi authentication yang teruji jika sesuai kebutuhan;
  • gunakan 2FA untuk akun yang memiliki akses penting jika kebutuhan keamanan mengharuskannya.

Contoh Alur Authentication Laravel yang Ideal

Secara keseluruhan, alur aplikasi web berbasis session dapat digambarkan seperti berikut:

                 User
                   ↓
              Login Form
                   ↓
            Validasi Request
                   ↓
          Verifikasi Credential
                   ↓
          Authentication sukses?
             /           \
           Tidak           Ya
            ↓              ↓
       Error Login    Regenerate Session
                           ↓
                       Dashboard
                           ↓
                     Middleware auth
                           ↓
                     Ambil User
                           ↓
                     Authorization
                           ↓
                  Business Operation
                           ↓
                       Response

Alur tersebut menunjukkan bahwa authentication dan authorization merupakan dua tahap yang saling melengkapi.

Contoh Login Controller Sederhana

Berikut contoh implementasi login berbasis session:

<?php

namespace App\Http\Controllers\Auth;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class LoginController
{
    public function store(Request $request)
    {
        $credentials = $request->validate([
            'email' => ['required', 'email'],
            'password' => ['required', 'string'],
        ]);

        if (!Auth::attempt($credentials)) {
            return back()->withErrors([
                'email' => 'Credential yang diberikan tidak cocok.',
            ]);
        }

        $request->session()->regenerate();

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

    public function destroy(Request $request)
    {
        Auth::logout();

        $request->session()->invalidate();
        $request->session()->regenerateToken();

        return redirect('/login');
    }
}

Contoh tersebut sengaja dibuat sederhana agar konsep authentication mudah dipahami. Untuk production, gunakan struktur authentication yang sesuai dengan versi Laravel dan starter kit yang digunakan oleh aplikasi.

Ringkasan Perintah dan Method Penting

KebutuhanContoh
Login attemptAuth::attempt()
Mengecek loginAuth::check()
Mengambil userAuth::user()
LogoutAuth::logout()
Regenerate session$request->session()->regenerate()
Invalidate session$request->session()->invalidate()
Regenerate CSRF token$request->session()->regenerateToken()
Authentication routemiddleware('auth')
Password hashingHash::make()
Password verificationHash::check()

Kesimpulan

Laravel Authentication digunakan untuk memastikan identitas user, sedangkan authorization digunakan untuk menentukan apa yang boleh dilakukan user tersebut.

Dalam authentication berbasis session, alur sederhananya adalah:

Login
 ↓
Verifikasi Credential
 ↓
Regenerate Session
 ↓
User Terautentikasi
 ↓
Middleware auth
 ↓
Authorization
 ↓
Business Logic

Beberapa method penting yang perlu dipahami adalah:

Auth::attempt($credentials);

Auth::check();

Auth::user();

Auth::logout();

Setelah login berhasil, session sebaiknya diregenerasi:

$request->session()->regenerate();

Sementara saat logout, session dapat diakhiri dengan:

Auth::logout();

$request->session()->invalidate();
$request->session()->regenerateToken();

Untuk authorization, Laravel menyediakan pendekatan seperti Gates dan Policies. Keduanya membantu memisahkan aturan permission dari business logic aplikasi.

Hal terpenting adalah jangan menganggap user yang sudah login otomatis memiliki seluruh akses. Authentication menjawab siapa user tersebut, sedangkan authorization menentukan tindakan yang diperbolehkan.

Dengan memahami login, session, middleware auth, password hashing, logout, Gates, dan Policies, developer memiliki fondasi yang kuat untuk membangun sistem authentication Laravel yang aman dan mudah dikembangkan.