Lompat ke konten Lompat ke sidebar Lompat ke footer

Cara Mengamankan Rest API Laravel Menggunakan Sanctum untuk Aplikasi Mobile

Bikin aplikasi mobile yang UI/UX-nya aesthetic itu emang penting, tapi kalau backend-nya nggak aman, itu literally red flag terbesar buat developer. Bayangin aja, lo udah capek-capek bikin API di Laravel, tapi gampang banget dibobol orang karena sistem auth-nya berantakan. Ngeri, kan?

Kalau lo lagi bikin REST API untuk aplikasi mobile (entah itu pake Flutter, React Native, atau Kotlin) dan ngerasa Laravel Passport itu terlalu overkill atau JWT terlalu ribet di-setup, kenalan dulu sama Laravel Sanctum.

Sanctum ini ibarat bestie buat API lo. Dia ringan, gampang di- setup, dan sat-set banget buat ngeluarin API Token. Yuk, langsung kita spill cara pasangnya!

Kenapa Harus Laravel Sanctum?

Jujurly, banyak yang masih bingung bedanya Sanctum sama Passport. Intinya gini:

  • Passport: Cocok kalau lo bikin sistem OAuth2 yang massive banget (kayak sistem "Login with Google/Facebook").

  • Sanctum: Didesain khusus buat SPA (Single Page Applications) dan aplikasi mobile sederhana yang cuma butuh sistem token-based authentication. Sangat effortless dan anti-ribet!

Step-by-Step Pasang Sanctum di Laravel

Nggak perlu overthinking, ikutin aja step ini pelan-pelan. Pastiin project Laravel lo udah jalan dengan baik, ya.

1. Install Library-nya

Buka terminal lo, masuk ke folder project, terus ketik perintah sakti ini buat narik package Sanctum via Composer:

Bash
composer require laravel/sanctum

Kalau udah kelar, kita publish file konfigurasinya dan jalankan migrasi database buat bikin tabel personal_access_tokens tempat nyimpen token-token si user.

Bash
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
php artisan migrate

2. Update Model User

Biar user lo punya kekuatan buat generate token, lo harus nambahin sifat (Trait) HasApiTokens di file model User lo.

Buka file app/Models/User.php, terus pastiin kode lo kurang lebih kayak gini:

PHP
namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens; // <-- Tambahin ini

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable; // <-- Jangan lupa panggil di sini
    
    // ... sisa kode lo
}

3. Bikin Fitur Login Buat Dapetin Token

Sekarang, kita bikin logika login-nya. Kalau user masukin email dan password yang bener, kita bakal ngasih mereka "kunci masuk" alias Token.

Bikin AuthController atau langsung taruh di controller yang udah lo siapin:

PHP
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use App\Models\User;

public function login(Request $request)
{
    // 1. Validasi inputan
    $request->validate([
        'email' => 'required|email',
        'password' => 'required',
    ]);

    // 2. Cari user-nya ada nggak di database
    $user = User::where('email', $request->email)->first();

    // 3. Cek password-nya bener nggak
    if (!$user || !Hash::check($request->password, $user->password)) {
        return response()->json([
            'message' => 'Email atau Password salah, cuy!'
        ], 401);
    }

    // 4. Generate Token dari Sanctum
    $token = $user->createToken('Mobile-App-Token')->plainTextToken;

    // 5. Kirim token ke frontend/mobile app
    return response()->json([
        'message' => 'Login sukses!',
        'token' => $token,
        'user' => $user
    ], 200);
}

Note: Token yang di-return itu wajib banget disimpen sama anak frontend/mobile (misalnya di SharedPreferences atau SecureStorage), karena token ini yang bakal dipakai buat ngakses API lo ke depannya.

4. Bikin Route API yang "Dilindungi"

Sekarang, mari kita tes. Buka file routes/api.php. Kita bakal bikin rute yang cuma bisa diakses kalau user bawa token yang valid. Caranya gampang banget, tinggal bungkus route-nya pake middleware auth:sanctum.

PHP
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

// Route ini bebas diakses siapa aja (buat login)
Route::post('/login', [AuthController::class, 'login']);

// Route ini DILINDUNGI, wajib bawa token Sanctum!
Route::middleware('auth:sanctum')->group(function () {
    
    // Contoh nampilin data profile user yang lagi login
    Route::get('/user', function (Request $request) {
        return $request->user();
    });

    // Lo bisa tambahin route lain buat fitur aplikasi lo di sini
    // Route::get('/transaksi', [TransaksiController::class, 'index']);

});

Cara Ngetesnya di Postman / Insomnia

Buat mastiin API lo jalan, coba tes hit endpoint /api/user tadi lewat Postman. Kalau lo nembak tanpa bawa token, sistem otomatis bakal nendang lo dengan pesan error (Unauthenticated).

Biar bisa masuk, lo harus masukin token yang lo dapet pas login ke bagian Headers atau Authorization (Bearer Token) di Postman:

  • Key: Authorization

  • Value: Bearer {token_yang_didapet_dari_login}

Kesimpulan

Gimana, gampang banget kan? Pake Laravel Sanctum itu literally bikin hidup developer backend jauh lebih tenang. Setup-nya cepet, keamanannya standar industri, dan integrasi ke mobile app juga gampang banget.

Mulai sekarang, stop bikin API yang polosan tanpa security layer. Selamat ngoding dan semoga aplikasi mobile lo sukses rilis tanpa celah keamanan!

Posting Komentar untuk "Cara Mengamankan Rest API Laravel Menggunakan Sanctum untuk Aplikasi Mobile"