Skip to content

Lokerwfh

  • Indonesia
  • Website
  • Hosting
  • Laravel
  • Development
  • Bisnis

Cara Membuat Sistem Login Dengan Laravel Sanctum: Keamanan Website Terjamin!

July 7, 2025 by Atticus Finch

Laravel Sanctum adalah paket autentikasi ringan untuk aplikasi web single-page, aplikasi seluler, dan API berbasis token. Dengan Sanctum, Anda dapat dengan mudah membuat sistem login yang aman dan terjamin untuk website Anda, tanpa harus berurusan dengan kompleksitas OAuth2 atau JWT. Artikel ini akan memandu Anda langkah demi langkah tentang cara membuat sistem login dengan Laravel Sanctum, memastikan keamanan website terjamin.

1. Pengantar Laravel Sanctum: Apa Itu dan Mengapa Harus Menggunakannya?

Laravel Sanctum, dulunya dikenal sebagai Laravel Airlock, menawarkan pendekatan sederhana dan fleksibel untuk autentikasi. Berbeda dengan sistem autentikasi berbasis token yang lebih kompleks seperti OAuth2, Sanctum fokus pada penggunaan session cookie dan Personal Access Token (PAT) untuk autentikasi.

Mengapa Memilih Laravel Sanctum?

  • Sederhana dan Mudah Digunakan: Sanctum sangat mudah dikonfigurasi dan digunakan, bahkan untuk pemula Laravel.
  • Ringan dan Cepat: Tidak seperti implementasi autentikasi yang lebih berat, Sanctum minim dan efisien.
  • Keamanan Terjamin: Sanctum memanfaatkan session cookie dan enkripsi untuk memastikan keamanan autentikasi.
  • Cocok untuk Berbagai Jenis Aplikasi: Ideal untuk SPA, aplikasi mobile, dan API.
  • Support Personal Access Tokens (PAT): Memungkinkan pengguna membuat token untuk mengakses API Anda, misalnya untuk integrasi dengan pihak ketiga.
  • CSRF Protection: Terintegrasi dengan proteksi CSRF bawaan Laravel.

Singkatnya, Sanctum adalah pilihan yang sangat baik jika Anda mencari solusi autentikasi yang sederhana, aman, dan terpercaya untuk website Anda. Sekarang mari kita masuk ke langkah-langkah implementasinya.

2. Persiapan Awal: Instalasi Laravel dan Konfigurasi Database

Sebelum memulai implementasi sistem login dengan Laravel Sanctum, pastikan Anda memiliki proyek Laravel yang sudah berjalan. Jika belum, Anda dapat membuatnya dengan perintah berikut:

composer create-project laravel/laravel nama-proyek

Ganti nama-proyek dengan nama proyek yang Anda inginkan. Setelah proyek Laravel berhasil dibuat, langkah selanjutnya adalah konfigurasi database.

Konfigurasi Database:

  1. Buka file .env di direktori proyek Anda.

  2. Cari variabel-variabel berikut dan sesuaikan dengan konfigurasi database Anda:

    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=nama_database
    DB_USERNAME=nama_pengguna
    DB_PASSWORD=kata_sandi

Ganti nama_database, nama_pengguna, dan kata_sandi dengan kredensial database Anda. Pastikan database sudah dibuat di MySQL atau sistem database yang Anda gunakan.

3. Instalasi dan Konfigurasi Laravel Sanctum: Langkah Demi Langkah

Setelah database dikonfigurasi, saatnya untuk menginstal Laravel Sanctum. Buka terminal dan jalankan perintah berikut di direktori proyek Anda:

composer require laravel/sanctum

Setelah instalasi selesai, Anda perlu mempublikasikan konfigurasi dan melakukan migrasi database. Jalankan perintah berikut:

php artisan vendor:publish --provider="LaravelSanctumSanctumServiceProvider"
php artisan migrate

Perintah php artisan vendor:publish akan menyalin file konfigurasi Sanctum ke direktori config/sanctum.php. File ini berisi opsi konfigurasi yang dapat Anda sesuaikan.

Perintah php artisan migrate akan membuat tabel yang dibutuhkan oleh Sanctum di database Anda, termasuk tabel personal_access_tokens untuk menyimpan Personal Access Tokens.

Terakhir, tambahkan HasApiTokens trait ke model User Anda (terletak di app/Models/User.php):

<?php

namespace AppModels;

use IlluminateContractsAuthMustVerifyEmail;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateFoundationAuthUser as Authenticatable;
use IlluminateNotificationsNotifiable;
use LaravelSanctumHasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

    // ... kode lainnya ...
}

Pastikan Anda sudah memiliki model User yang benar dan memiliki migrasi yang sesuai. Jika belum, Anda bisa membuat model dan migrasi dengan perintah php artisan make:model User -m.

4. Membuat Route dan Controller untuk Login dan Register

Selanjutnya, kita akan membuat route dan controller untuk menangani proses login dan registrasi. Pertama, buat controller dengan perintah:

php artisan make:controller AuthController

Buka file app/Http/Controllers/AuthController.php dan tambahkan kode berikut:

<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;
use IlluminateSupportFacadesAuth;
use IlluminateSupportFacadesHash;
use AppModelsUser;

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

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

        $token = $user->createToken('auth_token')->plainTextToken;

        return response()->json([
            'access_token' => $token,
            'token_type' => 'Bearer',
        ]);
    }

    public function login(Request $request)
    {
        if (!Auth::attempt($request->only('email', 'password'))) {
            return response()->json([
                'message' => 'Invalid login credentials'
            ], 401);
        }

        $user = User::where('email', $request['email'])->firstOrFail();

        $token = $user->createToken('auth_token')->plainTextToken;

        return response()->json([
            'access_token' => $token,
            'token_type' => 'Bearer',
        ]);
    }

    public function logout(Request $request)
    {
        $request->user()->tokens()->delete();

        return response()->json([
            'message' => 'Successfully logged out'
        ]);
    }
}

Kode di atas berisi fungsi untuk:

  • register: Menerima input nama, email, dan password, memvalidasinya, membuat user baru, dan menghasilkan token autentikasi.
  • login: Menerima input email dan password, memvalidasi kredensial, dan menghasilkan token autentikasi jika login berhasil.
  • logout: Menghapus semua token autentikasi user saat ini.

Selanjutnya, definisikan route untuk fungsi-fungsi ini di routes/api.php:

<?php

use AppHttpControllersAuthController;
use IlluminateHttpRequest;
use IlluminateSupportFacadesRoute;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

Route::post('/register', [AuthController::class, 'register']);
Route::post('/login', [AuthController::class, 'login']);

Route::middleware('auth:sanctum')->group(function () {
    Route::get('/user', function (Request $request) {
        return $request->user();
    });
    Route::post('/logout', [AuthController::class, 'logout']);
});

Perhatikan penggunaan middleware auth:sanctum untuk melindungi route yang membutuhkan autentikasi, seperti /user dan /logout.

5. Membuat Middleware EnsureEmailIsVerified: Tambahan Keamanan

Jika Anda ingin memastikan bahwa pengguna telah memverifikasi email mereka sebelum dapat mengakses fitur-fitur tertentu, Anda dapat membuat middleware EnsureEmailIsVerified. Pertama, buat middleware:

php artisan make:middleware EnsureEmailIsVerified

Buka file app/Http/Middleware/EnsureEmailIsVerified.php dan tambahkan kode berikut:

<?php

namespace AppHttpMiddleware;

use Closure;
use IlluminateHttpRequest;
use IlluminateSupportFacadesAuth;

class EnsureEmailIsVerified
{
    /**
     * Handle an incoming request.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  Closure(IlluminateHttpRequest): (IlluminateHttpResponse|IlluminateHttpRedirectResponse)  $next
     * @return IlluminateHttpResponse|IlluminateHttpRedirectResponse
     */
    public function handle(Request $request, Closure $next)
    {
        if (! Auth::user()->hasVerifiedEmail()) {
            return response()->json(['message' => 'Email belum diverifikasi.'], 403);
        }

        return $next($request);
    }
}

Kemudian, daftarkan middleware ini di app/Http/Kernel.php di dalam $routeMiddleware array:

protected $routeMiddleware = [
    'auth' => AppHttpMiddlewareAuthenticate::class,
    'auth.basic' => IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class,
    'cache.headers' => IlluminateHttpMiddlewareSetCacheHeaders::class,
    'can' => IlluminateAuthMiddlewareAuthorize::class,
    'guest' => AppHttpMiddlewareRedirectIfAuthenticated::class,
    'throttle' => IlluminateRoutingMiddlewareThrottleRequests::class,
    'verified' => IlluminateAuthMiddlewareEnsureEmailIsVerified::class, // Ditambahkan disini
    'ensure.email.is.verified' => AppHttpMiddlewareEnsureEmailIsVerified::class, // Tambahkan alias
];

Sekarang, Anda dapat menggunakan middleware ini di route Anda:

Route::middleware(['auth:sanctum', 'ensure.email.is.verified'])->group(function () {
    Route::get('/profile', function (Request $request) {
        return $request->user();
    });
});

Pastikan juga bahwa model User mengimplementasikan interface MustVerifyEmail:

<?php

namespace AppModels;

use IlluminateContractsAuthMustVerifyEmail;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateFoundationAuthUser as Authenticatable;
use IlluminateNotificationsNotifiable;
use LaravelSanctumHasApiTokens;

class User extends Authenticatable implements MustVerifyEmail // Implements MustVerifyEmail
{
    use HasApiTokens, HasFactory, Notifiable;

    // ... kode lainnya ...
}

Dan aktifkan fitur verifikasi email di EventServiceProvider.php:

/**
 * The event listener mappings for the application.
 *
 * @var array<class-string, array<int, class-string>>
 */
protected $listen = [
    Registered::class => [
        SendEmailVerificationNotification::class,
    ],
];

6. Implementasi di Frontend: Integrasi dengan Aplikasi SPA

Setelah backend selesai, langkah selanjutnya adalah mengintegrasikan sistem login ini dengan frontend aplikasi Anda. Asumsikan Anda menggunakan aplikasi SPA (Single Page Application) seperti React, Vue.js, atau Angular.

Alur Kerja:

  1. Form Login dan Register: Buat form login dan register di frontend Anda.
  2. Kirim Request ke API: Ketika form disubmit, kirim request POST ke endpoint /api/register atau /api/login.
  3. Simpan Token: Jika request berhasil, simpan token yang diterima (dalam format Bearer) di local storage atau cookie.
  4. Sertakan Token di Header: Setiap kali Anda mengirim request ke API yang membutuhkan autentikasi, sertakan token di header Authorization dengan format Bearer <token>.

Contoh dengan JavaScript:

// Contoh Login
fetch('/api/login', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({
        email: '[email protected]',
        password: 'password'
    })
})
.then(response => response.json())
.then(data => {
    if (data.access_token) {
        localStorage.setItem('token', data.access_token);
        // Redirect ke halaman yang dilindungi
    } else {
        // Tampilkan pesan error
    }
});

// Contoh Mengakses Endpoint yang Dilindungi
fetch('/api/user', {
    headers: {
        'Authorization': 'Bearer ' + localStorage.getItem('token')
    }
})
.then(response => response.json())
.then(data => {
    // Tampilkan data user
});

// Contoh Logout
fetch('/api/logout', {
    method: 'POST',
    headers: {
        'Authorization': 'Bearer ' + localStorage.getItem('token')
    }
})
.then(response => response.json())
.then(data => {
    localStorage.removeItem('token');
    // Redirect ke halaman login
});

Pastikan Anda menyesuaikan kode di atas dengan framework JavaScript yang Anda gunakan.

7. Keamanan Tambahan: Proteksi CSRF dan Rate Limiting

CSRF Protection:

Laravel Sanctum secara otomatis menyediakan proteksi CSRF saat digunakan dengan session cookie. Pastikan Anda telah mengkonfigurasi CSRF token dengan benar di aplikasi frontend Anda.

Rate Limiting:

Untuk mencegah serangan brute-force, Anda dapat mengimplementasikan rate limiting pada endpoint login. Laravel menyediakan middleware throttle untuk melakukan ini.

Contoh:

Route::middleware('throttle:5,1')->group(function () {
    Route::post('/login', [AuthController::class, 'login']);
});

Kode di atas akan membatasi jumlah request ke endpoint /login menjadi 5 kali per menit.

8. Menggunakan Personal Access Tokens (PAT)

Selain autentikasi berbasis session cookie, Sanctum juga mendukung penggunaan Personal Access Tokens (PAT). PAT memungkinkan pengguna membuat token yang dapat digunakan untuk mengakses API Anda.

Membuat PAT:

Anda dapat membuat PAT melalui controller atau model. Contoh melalui controller:

public function createToken(Request $request)
{
    $token = $request->user()->createToken($request->token_name);

    return ['token' => $token->plainTextToken];
}

Menggunakan PAT:

Sertakan token yang dihasilkan di header Authorization dengan format Bearer <token>.

Revoking PAT:

Anda dapat mencabut PAT dengan menghapusnya dari database.

9. Tips Optimasi Keamanan Laravel Sanctum

Berikut beberapa tips untuk meningkatkan keamanan implementasi Laravel Sanctum Anda:

  • Gunakan HTTPS: Pastikan website Anda menggunakan HTTPS untuk mengenkripsi semua komunikasi antara browser dan server.
  • Validasi Input: Selalu validasi semua input yang diterima dari pengguna untuk mencegah serangan injection.
  • Hash Password: Gunakan fungsi hashing yang kuat (seperti bcrypt) untuk mengenkripsi password pengguna.
  • Proteksi CSRF: Aktifkan proteksi CSRF untuk semua form dan request AJAX.
  • Rate Limiting: Implementasikan rate limiting pada endpoint login dan endpoint sensitif lainnya.
  • Regular Updates: Selalu update Laravel dan paket-paket yang Anda gunakan ke versi terbaru untuk mendapatkan patch keamanan terbaru.
  • Monitor Logs: Periksa logs secara berkala untuk mendeteksi aktivitas mencurigakan.
  • Gunakan API Gateway (Optional): Jika Anda memiliki banyak microservices, pertimbangkan untuk menggunakan API gateway untuk mengelola autentikasi dan otorisasi.

10. Troubleshooting Masalah Umum dengan Laravel Sanctum

Berikut beberapa masalah umum yang sering terjadi saat menggunakan Laravel Sanctum dan cara mengatasinya:

  • Token Tidak Tersimpan di Local Storage: Pastikan Anda menyimpan token dengan benar di local storage atau cookie. Periksa console browser untuk melihat apakah ada error JavaScript.
  • 401 Unauthorized: Pastikan Anda menyertakan token yang benar di header Authorization. Periksa apakah token sudah kadaluarsa atau telah dicabut.
  • CSRF Token Mismatch: Pastikan Anda telah mengkonfigurasi CSRF token dengan benar di aplikasi frontend Anda.
  • Session Cookie Tidak Dibuat: Pastikan konfigurasi session cookie sudah benar di file config/session.php.
  • Middleware auth:sanctum Tidak Bekerja: Pastikan Anda telah menginstal dan mengkonfigurasi Laravel Sanctum dengan benar. Periksa apakah model User menggunakan trait HasApiTokens.

11. Kesimpulan: Sistem Login Aman dan Mudah dengan Laravel Sanctum

Laravel Sanctum adalah pilihan yang sangat baik untuk membuat sistem login yang aman dan mudah untuk website Anda. Dengan mengikuti langkah-langkah yang dijelaskan dalam artikel ini, Anda dapat dengan mudah mengintegrasikan Sanctum ke dalam proyek Laravel Anda dan memastikan keamanan website terjamin. Ingatlah untuk selalu mengikuti praktik-praktik keamanan terbaik dan memantau logs secara berkala untuk mendeteksi aktivitas mencurigakan. Dengan implementasi yang tepat, Laravel Sanctum akan memberikan solusi autentikasi yang handal dan efisien.

Dengan pemahaman mendalam tentang cara membuat sistem login dengan Laravel Sanctum dan implementasi praktik keamanan yang baik, Anda dapat membangun aplikasi web yang tidak hanya fungsional tetapi juga aman dan terpercaya. Selamat mencoba!

Categories API, Authentication, Laravel, Security, Web Tags API Authentication, Authentication, Laravel Sanctum, Login System, PHP Framework, Sanctum, Security, SPA Authentication, Token Based Authentication, Website Security
Template Admin Laravel Responsive Bootstrap: Gratis & Mudah Digunakan
Tips Optimasi Database Aplikasi Laravel: Website Lebih Cepat & Efisien

Recent Posts

  • HP Gaming Murah 2 Jutaan RAM Besar Paling Dicari: Temukan Jagoan Nge-Game Hematmu!
  • HP Android Terbaik Harga di Bawah 2.5 Juta dengan Fitur Premium: Pilihan Cerdas untuk Pengalaman Optimal
  • Daftar Lengkap HP Android 2 Jutaan Paling Direkomendasikan 2024: Pilihan Terbaik dengan Budget Terbatas
  • HP Android 2 Jutaan dengan Chipset Kencang dan Anti Lag: Pilihan Cerdas untuk Performa Optimal
  • Cari HP Android 2 Jutaan Kamera Depan Terbaik untuk Selfie? Ini Dia Pilihan Teratasnya!
  • Pilihan HP Android 2 Jutaan Terbaik untuk Kerja dan Produktivitas: Investasi Cerdas Tanpa Bikin Kantong Bolong
  • HP Android 2 Jutaan Terbaik untuk Ojek Online: Baterai Awet, Performa Optimal!
  • HP Android 2 Jutaan Terlaris dengan Komponen Kualitas Tinggi: Pilihan Terbaik di Tahun Ini
  • Rekomendasi Smartphone 2 Jutaan Terbaik untuk Pelajar dan Mahasiswa: Pilihan Cerdas dan Hemat di Tahun Ini
  • Review Mendalam HP Android 2 Jutaan Terbaik di 2024: Pilihan Paling Worth It untuk Dompet Anda

Resource

  • About us
  • Contact Us
  • Privacy Policy
© 2026 Lokerwfh • Built with GeneratePress