Blog by Fadil Rumasoreng

Saya menulis tentang pengalaman saya membangun aplikasi, eksperimen teknologi, dan ide-ide seputar web development. Semua ini saya bagikan atau saya tulis murni dari pengalaman yang saya dapatkan ketika mengembangkan perangkat lunak.

Laravel Authentication: Session, Token, OAuth2, Socialite, dan Multi-Auth

CNFadil Rumasoreng· 30 Sep 2025· 0
Laravel Authentication: Session, Token, OAuth2, Socialite, dan Multi-Auth

Jenis Autentikasi di Laravel: Panduan Lengkap untuk Pemula hingga Menengah

Meta Description:
Pelajari jenis autentikasi di Laravel—session, token, OAuth2, multi-auth, hingga social login—lengkap dengan contoh kode dan best practice.


Mengapa Autentikasi Penting di Laravel?

Dalam dunia aplikasi web modern, hampir setiap sistem membutuhkan mekanisme autentikasi. Mulai dari aplikasi e-commerce, portal akademik, sistem manajemen perusahaan, hingga aplikasi sosial media—semua membutuhkan cara aman untuk mengenali siapa user yang sedang mengakses aplikasi.

Tanpa autentikasi yang baik:

  • Data sensitif bisa diakses orang yang salah.

  • User experience jadi buruk karena sistem login/logout tidak stabil.

  • Integrasi API eksternal jadi berantakan.

Laravel, sebagai salah satu framework PHP paling populer, punya ekosistem autentikasi yang kaya. Ada banyak pilihan metode autentikasi yang bisa disesuaikan dengan jenis aplikasi dan target pengguna.

Di artikel ini, kita akan membahas 5 jenis autentikasi utama di Laravel, dilengkapi contoh kode dan best practice industri.


1. Session-based Authentication

Apa Itu Session-based Auth?

Ini adalah metode paling klasik dan bawaan Laravel. Sistem bekerja dengan cara menyimpan informasi user di session server, lalu browser menyimpan cookie (laravel_session) yang mereferensikan session tersebut.

Setiap kali user mengirim request, cookie akan ikut terkirim, dan Laravel mengenali user berdasarkan data di server.

Cocok Untuk:

  • Aplikasi web berbasis Blade template.

  • SPA/SSR yang tetap ingin menggunakan cookie-based auth (misalnya dengan Laravel Sanctum).

Kelebihan

  • Aman karena cookie bisa diatur HttpOnly.

  • Dukungan penuh untuk CSRF protection.

  • Multi-tab friendly (login di satu tab berlaku di tab lain).

Kekurangan

  • Hanya cocok di environment browser.

  • Tidak stateless (server harus simpan session).

Contoh Implementasi

// routes/web.php
Route::get('/login', [AuthController::class, 'showLoginForm']);
Route::post('/login', [AuthController::class, 'login']);

Route::middleware('auth')->group(function () {
    Route::get('/dashboard', function () {
        return view('dashboard');
    });
});

Ketika user berhasil login, Laravel otomatis mengelola session dan cookie tanpa perlu konfigurasi tambahan.


2. Token-based Authentication

Apa Itu Token-based Auth?

Metode ini menggunakan token unik yang diberikan backend setelah login. Token dikirim melalui Authorization Header setiap kali request.

Contoh:

Authorization: Bearer your_token_here

Token biasanya berupa JWT (JSON Web Token) atau string unik yang di-generate oleh Laravel.

Cocok Untuk:

  • API publik.

  • Aplikasi mobile.

  • Testing API dengan Postman.

Kelebihan

  • Stateless (tidak perlu session di server).

  • Fleksibel: bisa digunakan oleh web, mobile, bahkan IoT.

  • Mudah diuji di Postman atau Insomnia.

Kekurangan

  • Token harus disimpan dengan aman (jangan di localStorage tanpa proteksi).

  • Tidak otomatis revoke semua token, butuh logika tambahan.

Contoh Implementasi dengan Laravel Sanctum

// routes/api.php
Route::post('/login', [AuthController::class, 'login']);

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

Login menghasilkan token:

public function login(Request $request)
{
    $user = User::where('email', $request->email)->first();

    if (! $user || ! Hash::check($request->password, $user->password)) {
        return response()->json(['message' => 'Invalid credentials'], 401);
    }

    return ['token' => $user->createToken('api-token')->plainTextToken];
}

3. OAuth2 Authentication (Laravel Passport)

Apa Itu OAuth2?

OAuth2 adalah standar industri untuk autentikasi dan otorisasi, biasanya dipakai untuk aplikasi skala besar atau ketika kita membuka API untuk pihak ketiga.

Contoh paling familiar: Login dengan Google, GitHub, atau Facebook.

Cocok Untuk:

  • API publik yang akan diakses developer lain.

  • Mobile apps yang butuh refresh token.

  • Enterprise-level aplikasi dengan manajemen akses yang kompleks.

Kelebihan

  • Mendukung refresh token dan token expiry.

  • Bisa melakukan revoke token.

  • Standar yang sudah terbukti aman dan banyak dipakai.

Kekurangan

  • Kompleks, setup lebih panjang.

  • Overkill jika hanya untuk aplikasi internal kecil.

Contoh Instalasi Passport

composer require laravel/passport
php artisan migrate
php artisan passport:install

Kemudian tambahkan trait di User.php:

use Laravel\Passport\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
}

Route dengan guard Passport:

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

4. Multi-Auth (Multiple User Providers)

Apa Itu Multi-Auth?

Laravel memungkinkan kita menggunakan lebih dari satu model user. Misalnya:

  • Admin dengan dashboard sendiri.

  • Customer dengan area customer.

  • Vendor dengan panel vendor.

Setiap role bisa memiliki guard dan login terpisah.

Cocok Untuk:

  • Aplikasi marketplace.

  • Sistem manajemen multi-panel (admin, dosen, mahasiswa, dll.).

Kelebihan

  • Fleksibel untuk banyak role.

  • Bisa mengatur middleware dan guard berbeda.

Kekurangan

  • Perlu konfigurasi ekstra di config/auth.php.

  • Kadang butuh middleware custom.

Contoh Konfigurasi

config/auth.php

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'admin' => [
        'driver' => 'session',
        'provider' => 'admins',
    ],
],

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ],
    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Models\Admin::class,
    ],
],

Route khusus admin:

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

5. Social Authentication (Laravel Socialite)

Apa Itu Social Auth?

Dengan Socialite, user bisa login menggunakan akun eksternal seperti Google, Facebook, GitHub, Twitter, dsb.

Cocok Untuk:

  • Onboarding cepat tanpa form panjang.

  • Aplikasi yang ingin menarik user dengan login sekali klik.

Kelebihan

  • UX lebih baik (user tidak perlu bikin password baru).

  • Mudah diintegrasikan.

Kekurangan

  • Harus daftar aplikasi di setiap provider.

  • Kadang butuh logika tambahan untuk sinkronisasi data user.

Contoh Implementasi

composer require laravel/socialite

Tambahkan di config/services.php:

'github' => [
    'client_id' => env('GITHUB_CLIENT_ID'),
    'client_secret' => env('GITHUB_CLIENT_SECRET'),
    'redirect' => 'http://your-app.com/auth/github/callback',
],

Route untuk GitHub login:

Route::get('/auth/github', [AuthController::class, 'redirectToGithub']);
Route::get('/auth/github/callback', [AuthController::class, 'handleGithubCallback']);

Controller:

public function redirectToGithub()
{
    return Socialite::driver('github')->redirect();
}

public function handleGithubCallback()
{
    $githubUser = Socialite::driver('github')->user();

    $user = User::firstOrCreate(
        ['email' => $githubUser->getEmail()],
        ['name' => $githubUser->getName()]
    );

    Auth::login($user);

    return redirect('/dashboard');
}

Ringkasan Tabel

Jenis Auth

Stateful / Stateless

Cocok Untuk

Contoh Paket Laravel

Session-based

Stateful

Web, SPA/SSR

Laravel Default, Sanctum

Token-based

Stateless

API, Mobile Apps

Sanctum (token), Passport

OAuth2 (Passport)

Stateless

Public API, Enterprise

Laravel Passport

Multi-Auth

Bisa keduanya

Multi-role apps

Config auth.php native

Social Auth

Stateless

Social login

Laravel Socialite


Rekomendasi Best Practice

Use Case

Auth Method

SPA (React/Vue)

Sanctum (cookie)

Next.js dengan SSR

Sanctum (cookie)

Mobile app

Sanctum (token) / Passport

Postman / API testing

Sanctum (token)

Login via Google / GitHub

Socialite

Public API untuk pihak ke-3

Passport (OAuth2)


FAQ

1. Mana yang lebih baik untuk API: Sanctum atau Passport?

  • Sanctum cocok untuk aplikasi kecil hingga menengah.

  • Passport cocok untuk API publik atau enterprise yang butuh OAuth2 penuh.

2. Apakah bisa menggabungkan beberapa jenis autentikasi?
Ya, Laravel mendukung multiple guard. Misalnya: Web pakai session, API pakai Sanctum, Social login pakai Socialite.

3. Apakah Laravel Socialite aman?
Ya, karena menggunakan OAuth2 standar. Namun tetap pastikan callback URL benar dan gunakan HTTPS.

4. Apakah session-based auth bisa dipakai untuk mobile app?
Kurang cocok, karena session sangat bergantung pada browser cookie. Lebih baik gunakan token-based auth.

5. Apakah autentikasi Laravel bisa di-custom?
Bisa. Laravel sangat fleksibel—mulai dari custom guard, middleware, hingga sistem multi-auth kompleks.

Komentar

Belum ada komentar.