Halo teman-teman π
Selamat datang kembali di series Belajar Laravel API by Kompak Akademi.
Kalau kamu udah sampai di artikel ke-5 ini, artinya kamu udah mulai serius belajar bikin API yang beneran bisa dipakai di dunia nyata. π₯
Hari ini kita akan bahas sesuatu yang krusial bange t: autentikasi API β biar user yang login aja yang bisa mengakses data tertentu.
Yup, kita akan belajar :
- Apa itu autentikasi dan kenapa API butuh sistem login.
- Cara kerja Laravel Sanctum untuk mengamankan API.
- Gimana cara membuat token untuk user.
- Cara mengakses endpoint yang dilindungi (pakai token).
- Dan terakhir, bikin logout API juga biar lengkap.
Apa Itu Autentikasi di API?
Bayangin kamu punya aplikasi Todo App. Semua user bisa daftar dan bikin daftar tugasnya masing-masing. Nah, kamu tentu gak mau data tugas milik user A bisa diintip atau diubah oleh user B, kan?
Di sinilah autentikasi API berperan.
Autentikasi itu kayak sistem penjaga pintu β memastikan setiap request yang datang benar-benar berasal dari user yang sah.
Laravel menyediakan dua mekanisme populer :
- Passport β cocok untuk sistem besar atau multi-platform.
- Sanctum β lebih ringan, ideal buat single-page app, mobile app, dan API personal.
Kita akan pakai Sanctum karena ringan, mudah, dan powerful. πͺ
Langkah 1 β Instalasi Laravel Sanctum
Pertama, pastikan kamu udah punya project Laravel yang aktif.
Lalu jalankan perintah berikut di terminal :
composer require laravel/sanctum
Setelah proses selesai, jalankan migrasi bawaan Sanctum :
php artisan migrate
Lalu aktifkan middleware Sanctum di file app/Http/Kernel.php
.
Biasanya, Laravel sudah otomatis mengatur bagian ini, tapi pastikan kamu punya baris berikut di middleware group api
:
'api' => [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
Terakhir, buka model User.php
dan tambahkan trait HasApiTokens
:
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
}
Sekarang Laravel-mu sudah siap menggunakan token API! π
Langkah 2 β Membuat Endpoint Register dan Login
Sekarang, kita buat dua route baru : register
dan login
.
Buka file routes/api.php
dan tambahkan :
use App\Http\Controllers\Api\AuthController;
Route::post('/register', [AuthController::class, 'register']);
Route::post('/login', [AuthController::class, 'login']);
Lalu buat controllernya :
php artisan make:controller Api/AuthController
Buka file app/Http/Controllers/Api/AuthController.php
dan isi dengan :
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
class AuthController extends Controller
{
public function register(Request $request)
{
$validated = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email',
'password' => 'required|min:6',
]);
$user = User::create([
'name' => $validated['name'],
'email' => $validated['email'],
'password' => Hash::make($validated['password']),
]);
$token = $user->createToken('auth_token')->plainTextToken;
return response()->json([
'success' => true,
'message' => 'Registrasi berhasil',
'token' => $token,
'user' => $user
], 201);
}
public function login(Request $request)
{
$user = User::where('email', $request->email)->first();
if (! $user || ! Hash::check($request->password, $user->password)) {
return response()->json([
'success' => false,
'message' => 'Email atau password salah'
], 401);
}
$token = $user->createToken('auth_token')->plainTextToken;
return response()->json([
'success' => true,
'message' => 'Login berhasil',
'token' => $token,
'user' => $user
]);
}
}
Sekarang kamu udah bisa coba register dan login via Postman.
- Method :
POST
- URL :
http://127.0.0.1:8000/api/register
- Body (JSON) :
{
"name": "Syafiq Rizky",
"email": "syafiq@example.com",
"password": "password123"
}
Kalau berhasil, kamu bakal dapat response seperti ini π
{
"success": true,
"message": "Registrasi berhasil",
"token": "1|6TsKZQFf...",
"user": {
"id": 1,
"name": "Syafiq Rizky",
"email": "syafiq@example.com"
}
}
Token inilah yang nanti akan kamu pakai buat mengakses endpoint yang dilindungi. π
Langkah 3 β Membuat Endpoint Terproteksi
Sekarang kita buat contoh endpoint yang hanya bisa diakses kalau user sudah login.
Tambahkan route ini di api.php
:
Route::middleware('auth:sanctum')->get('/profile', function (Request $request) {
return response()->json([
'success' => true,
'data' => $request->user()
]);
});
Coba akses http://127.0.0.1:8000/api/profile
di Postman tanpa token β hasilnya pasti Unauthorized (401).
Sekarang tambahkan token dari hasil login ke bagian Authorization β Bearer Token, lalu klik Send.
Kalau berhasil, kamu bakal dapat data profil user kamu π―
{
"success": true,
"data": {
"id": 1,
"name": "Syafiq Rizky",
"email": "syafiq@example.com"
}
}
Langkah 4 β Logout API
Supaya lengkap, kita tambahkan juga endpoint logout
:
Route::middleware('auth:sanctum')->post('/logout', [AuthController::class, 'logout']);
Lalu tambahkan fungsi di AuthController
:
public function logout(Request $request)
{
$request->user()->tokens()->delete();
return response()->json([
'success' => true,
'message' => 'Logout berhasil, token dihapus'
]);
}
Sekarang, setiap kali user logout, tokennya langsung hangus β jadi aman banget π₯
Kesimpulan
Hari ini kamu sudah belajar hal besar :
β
Instalasi dan konfigurasi Laravel Sanctum.
β
Membuat API register dan login.
β
Menghasilkan token autentikasi untuk user.
β
Mengakses endpoint dengan proteksi auth:sanctum
.
β
Dan logout dengan menghapus token.
Dengan Sanctum, API kamu kini punya sistem login seperti aplikasi profesional.
Besok kita akan lanjut ke topik yang makin keren lagi β menyimpan dan mengelola data di database lewat API CRUD lengkap. π
Sampai jumpa di artikel selanjut nya π
Kalau ada pertanyaan silahkan bisa join ke komunitas kita baik di discord ataupun di telegram group :
βSecurity isnβt about paranoia, itβs about respect β respect untuk data user, dan respect untuk kode yang kamu tulis.β