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.
| Konsep | Pertanyaan | Contoh |
|---|---|---|
| Authentication | Siapa user ini? | User berhasil login |
| Authorization | Apa 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.
| Aspek | Session | Token |
|---|---|---|
| Umum digunakan untuk | Web browser | API dan client tertentu |
| State | Disimpan pada server/session infrastructure | Credential token digunakan oleh client |
| Cookie | Umumnya digunakan | Tergantung implementasi |
| Logout | Mengakhiri session authentication | Dapat 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.
| Gate | Policy |
|---|---|
| Cocok untuk aturan kemampuan tertentu | Cocok untuk authorization berbasis model |
| Aturan dapat berdiri sendiri | Aturan dikelompokkan dalam class Policy |
| Praktis untuk aturan sederhana | Cocok 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
| Kebutuhan | Contoh |
|---|---|
| Login attempt | Auth::attempt() |
| Mengecek login | Auth::check() |
| Mengambil user | Auth::user() |
| Logout | Auth::logout() |
| Regenerate session | $request->session()->regenerate() |
| Invalidate session | $request->session()->invalidate() |
| Regenerate CSRF token | $request->session()->regenerateToken() |
| Authentication route | middleware('auth') |
| Password hashing | Hash::make() |
| Password verification | Hash::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.

