Home Web Laravel Simple! Membangun API dengan Laravel Sanctum.

Simple! Membangun API dengan Laravel Sanctum.

0
Simple! Membangun API dengan Laravel Sanctum.

Laravel Sanctum menyediakan sistem otentikasi yang ringan untuk aplikasi SPA (Single Page Applications), aplikasi mobile, dan API berbasis token. Dengan Sanctum, setiap pengguna aplikasi dapat membuat beberapa token API untuk akun mereka, yang dapat diberi hak akses tertentu. Token ini mengatur tindakan apa saja yang diizinkan untuk dilakukan oleh token tersebut.

Laravel Sanctum dirancang untuk menyelesaikan dua masalah utama:

  1. Token API: Sanctum memungkinkan kita mengeluarkan token API untuk pengguna tanpa kerumitan OAuth. Fitur ini terinspirasi dari aplikasi seperti GitHub yang memungkinkan pengguna menghasilkan “personal access token.” Token ini dapat digunakan dalam jangka waktu panjang dan dapat dicabut kapan saja oleh pengguna. Token API ini disimpan dalam tabel database dan diotentikasi melalui header Authorization.
  2. Otentikasi SPA: Sanctum juga menyediakan cara sederhana untuk mengotentikasi aplikasi SPA yang berkomunikasi dengan API Laravel. Tidak menggunakan token, Sanctum memanfaatkan otentikasi sesi berbasis cookie yang sudah terintegrasi di Laravel. Ini memungkinkan perlindungan CSRF dan otentikasi yang aman, sambil melindungi dari kebocoran kredensial melalui serangan XSS.

1. Persiapan Awal

Sebelum memulai, pastikan memiliki proyek Laravel yang sudah terinstal. Jika belum, Anda dapat membuat proyek baru dengan perintah berikut:

composer create-project --prefer-dist laravel/laravel nama-proyek

Setelah proyek terinstal, buka folder proyek:

cd nama-proyek

2. Instalasi Laravel Sanctum

Untuk menginstal Laravel Sanctum, jalankan perintah berikut:

composer require laravel/sanctum

Selanjutnya, Anda harus mempublikasikan file konfigurasi. File konfigurasi akan ditempatkan di direktori konfigurasi config/app.php:

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

3. Migrasi Database

Terakhir, Anda harus menjalankan migrasi database. Sanctum akan membuat satu tabel database untuk menyimpan token API:

php artisan migrate

4. Menambahkan Middleware Sanctum

Berikutnya, jika Anda berencana menggunakan Sanctum untuk mengautentikasi SPA, Anda harus menambahkan middleware Sanctum ke grup middleware api dalam file app/Http/Kernel.php aplikasi Anda:

'api' => [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
\Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],

5. Konfigurasi Model User

Pastikan model User Anda menggunakan trait HasApiTokens dari Sanctum. Buka file app/Models/User.php dan tambahkan trait tersebut:

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
use HasApiTokens;

// ...
}

6. Membuat Rute API untuk Autentikasi

Selanjutnya, buat rute API untuk registrasi dan login. Buka file routes/api.php dan tambahkan kode berikut:

use App\Http\Controllers\AuthController;

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

7. Membuat Controller untuk Autentikasi

Buat controller baru dengan nama AuthController:

php artisan make:controller AuthController

Kemudian, buka file app/Http/Controllers/AuthController.php dan tambahkan metode untuk registrasi dan login:

namespace App\Http\Controllers;

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

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),
]);

return response()->json(['message' => 'User registered successfully!'], 201);
}

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

$user = User::where('email', $request->email)->first();

if (!$user || !Hash::check($request->password, $user->password)) {
throw ValidationException::withMessages([
'email' => ['The provided credentials are incorrect.'],
]);
}

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

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

8. Menggunakan Token untuk Akses API

Setelah pengguna berhasil login, mereka akan menerima token yang dapat digunakan untuk mengakses rute yang dilindungi. Untuk mengakses rute /user, pengguna harus mengirimkan token dalam header permintaan:

GET /api/user
Authorization: Bearer {token}

9. Mengamankan Rute dengan Middleware

Anda sudah menambahkan middleware auth:sanctum pada rute /user, yang mengharuskan pengguna untuk mengautentikasi sebelum mengakses informasi mereka. Anda bisa menambahkan middleware ini pada rute lain yang perlu dilindungi.

Contoh:

Route::middleware('auth:sanctum')->get('/profile', [UserProfileController::class, 'show']);

10. Menguji API

Untuk menguji API, Anda bisa menggunakan Postman, Insomnia atau tool serupa:

  • Registrasi: Kirim permintaan POST ke /api/register dengan data JSON seperti
{
     "name": "John Doe", 
     "email": "[email protected]", 
     "password": "password123", 
     "password_confirmation": "password123" 
}
  • Login: Kirim permintaan POST ke /api/login dengan data JSON seperti:
{ 
     "email": "[email protected]", 
     "password": "password123" 
}
  • Akses User Info: Setelah login, gunakan token yang diterima untuk mengakses /api/user dengan header Authorization yang sesuai.

Kesimpulan

Laravel Sanctum memberikan solusi yang sederhana dan efektif untuk otentikasi API. Dengan mengimplementasikan langkah-langkah di atas, Anda dapat dengan mudah menambahkan fitur keamanan pada aplikasi Anda. Sanctum juga sangat fleksibel, sehingga cocok untuk aplikasi SPA dan API sederhana. Dengan kemudahan penggunaan dan integrasi yang baik dengan Laravel, Sanctum menjadi salah satu pilihan tepat untuk mengamankan API.