Modul Authentication Laravel
1.1. Tujuan
Setelah mengikuti modul ini mahasiswa diharapkan dapat:
1. Memahami konsep autentikasi dan otorisasi dalam pengembangan REST API.
2. Mengimplementasikan sistem autentikasi berbasis token menggunakan Laravel
Sanctum.
3. Mengamankan endpoint API berdasarkan peran (role) atau kepemilikan data
(ownership).
4. Menguji endpoint menggunakan postman.
1.2. Alat dan Bahan
1. XAMPP / Laravel Sail / Laragon / Valet
2. Composer
3. Laravel 12
4. Postman
5. MySQL / MariaDB
6. Laravel Sanctum
1.3. Tugas Pendahuluan
1. Apa perbedaan antara autentikasi dan otorisasi dalam konteks REST API?
2. Apa keuntungan menggunakan Laravel Sanctum dibandingkan metode autentikasi
lainnya di Laravel?
3. Jelaskan apa yang dimaksud dengan Policy di Laravel dan dalam kasus apa kita
menggunakannya.
4. Mengapa perlu membatasi akses API berdasarkan peran atau kepemilikan data?
1.4. Dasar Teori
1.4.1. Authentikasi (Authentication)
Autentikasi adalah proses memverifikasi identitas pengguna sebelum memberikan akses ke
sistem. Dalam konteks Laravel REST API, autentikasi sering dilakukan menggunakan token
untuk memastikan setiap request berasal dari pengguna yang sah. Laravel Sanctum
menyediakan sistem autentikasi berbasis token ringan dan aman, ideal untuk SPA (Single Page
Application) dan Mobile Application.
Sanctum memungkinkan pengguna login dan menerima token yang harus dikirim dalam
header setiap permintaan API berikutnya.
1.4.2. Otorisasi (Authorization)
Otorisasi adalah proses menentukan apakah pengguna yang telah terautentikasi diizinkan
melakukan aksi tertentu pada resource tertentu. Misalnya, hanya pemilik data yang bisa
mengedit atau menghapus datanya, atau hanya admin yang boleh mengakses data pengguna
lain. Di Laravel, otorisasi dapat diatur menggunakan Policy atau Gate, dengan Policy lebih
direkomendasikan untuk REST API berbasis resource.
1.4.3. Laravel Sanctum
Laravel Sanctum adalah package resmi Laravel yang menyediakan sistem autentikasi token
sederhana. Sanctum sangat cocok untuk REST API karena fleksibel dan mudah dikonfigurasi.
Setiap pengguna yang berhasil login akan diberikan token yang dapat digunakan untuk
mengakses endpoint yang dilindungi.
Sanctum bekerja dengan cara menyimpan token di database (personal_access_tokens) dan
memverifikasi token yang dikirim melalui header Authorization.
1.4.4. Policy
Policy adalah class di Laravel yang berisi aturan otorisasi untuk model tertentu. Setiap aksi
seperti view, create, update, dan delete bisa dibatasi dengan kondisi tertentu, seperti apakah
user adalah pemilik data atau memiliki role tertentu.
Policy dihubungkan dengan model tertentu dan dipanggil menggunakan
$this->authorize('aksi', $model) di dalam controller.
1.5. Jurnal
Dalam modul ini, mahasiswa akan mengembangkan API berbasis Laravel Sanctum untuk
manajemen postingan. Fitur yang akan dibangun meliputi:
• Register, Login, Logout menggunakan Laravel Sanctum
• Melihat daftar postingan
• Menambahkan, mengubah, dan menghapus postingan
• Hanya user pemilik postingan yang dapat mengubah postingannya
• Admin dapat menghapus semua postingan
1.5.1. Clone Project Github
Pertama-tama clone project yang telah tersedia di github, kemudian masuk ke proyek.
1.5.2. Install Dependency
Instalasi dependency untuk Laravel dengan composer
1.5.3. Konfigurasi file environment variable
Copy .env.example dengan file baru bernama .env.
Kemudian generate key APP_KEY di file .env
Selanjutnya ubah konfigurasi database seperti berikut:
1.5.4. Buat database api_auth_praktikum di MySQL/phpMyAdmin
1.5.5. Menginstall Laravel Sanctum dan melakukan setup API
Perintah ini akan:
Install Sanctum.
Mengatur API routes dan middleware.
Publish konfigurasi Sanctum.
1.5.6. Migrasi dan seeding database
Lakukan migrate untuk membuat tabel yang dibutuhkan oleh Sanctum:
Selanjutnya seeding untuk mendaftarkan admin
*(untuk keamanan dan best practice, sebaiknya akun admin dibuat langsung melalui seeder
atau manual lewat database, bukan melalui endpoint publik seperti register)
1.5.7. Memperbarui model User
Import HasApiTokens:
Gunakan HasApiTokens sebagai Traits di User model, dan update fillable dengan kolom role:
1.5.8. Membuat API AuthController
Buat AuthController dengan perintah:
Import package yang diperlukan:
Buat method register:
Buat method login:
Buat method logout:
1.5.9. Memperbarui api routes
Isi api.php di folder routes:
1.5.10. Testing API dengan Postman
Buat Collection baru dengan nama: PRAKTIKUM_AUTH
Kemudian uji endpoint seperti di bawah ini.
Screenshot hasil setiap request.
a. Register
Method : POST
URL : /api/register
Body (x-www-form-urlencoded):
o name: nama praktikan
o email: email praktikan
o password: 123456
o password_confirmation: 123456
b. Login
Method : POST
URL : /api/login
Body (x-www-form-urlencoded):
o isikan email dan password yang digunakan untuk mendaftar
Copy token dari response/hasil request. Misal:
1|ZjAe8tJFJC5MmZ0584cGGBkhV6mplaCdNFibJqnyf957efc5
c. Logout
Method : POST
URL : /api/logout
Authorization:
o Type: Bearer Token
o Isi Token yang telah di copy dari response saat login
1.6. Tugas Akhir
1.6.1. Buat controller API PostController
Kemudian isi:
1.6.2. Menambahkan resource Post dengan middleware pada API routes
1.6.3. Tes Menggunakan Postman
Buat Collection baru dengan nama: PRAKTIKUM_AUTH
Kemudian uji endpoint seperti di bawah ini.
Screenshot hasil setiap request.
a. Mengakses endpoint yang diproteksi oleh sanctum
Method : GET
URL : /api/posts
(User yang tidak login atau tidak memiliki token tidak bisa melihat post)
b. Login sebagai user biasa
Method : POST
URL : /api/login
Body (x-www-form-urlencoded):
o isikan email dan password yang digunakan untuk mendaftar
Copy token dari response/hasil request. Misal:
1|ZjAe8tJFJC5MmZ0584cGGBkhV6mplaCdNFibJqnyf957efc5
c. Buat post baru (user dapat membuat post)
Method : POST
URL : /api/posts
Authorization:
o Type: Bearer Token
o Isi Token yang telah di copy dari response saat login user
Body (x-www-form-urlencoded):
o title: “Post Authorization”
o content: “Authorization sederhana”
d. Logout
Method : POST
URL : /api/logout
Authorization:
o Type: Bearer Token
o Isi Token yang telah di copy dari response saat login
e. Register user lain
Method : POST
URL : /api/register
Body (x-www-form-urlencoded):
o name: new user
o email:
[email protected] o password: 123456
o password_confirmation: 123456
f. Login sebagai user baru
Method : POST
URL : /api/login
Body (x-www-form-urlencoded):
o email:
[email protected] o password: 123456
Copy token dari response/hasil request. Misal:
1|ZjAe8tJFJC5MmZ0584cGGBkhV6mplaCdNFibJqnyf957efc5
g. User baru mengupdate post user lain
Method : PUT
URL : /api/posts/1
Authorization:
o Type: Bearer Token
o Isi Token yang telah di copy dari response saat login user baru
Body (x-www-form-urlencoded):
o title: "Saya mau ubah post orang"
o Content: “Coba ubah post”
(User tidak berhak mengubah post orang lain.)
h. User baru menghapus post user lain
Method : DELETE
URL : /api/posts/1
Authorization:
o Type: Bearer Token
o Isi Token yang telah di copy dari response saat login user baru
(User tidak berhak menghapus post orang lain.)
i. Logout
Method : POST
URL : /api/logout
Authorization:
o Type: Bearer Token
o Isi Token yang telah di copy dari response saat login
j. Login admin
Method : POST
URL : /api/login
Body (x-www-form-urlencoded):
o email: [email protected]
o password: admin123
Copy token dari response/hasil request. Misal:
1|ZjAe8tJFJC5MmZ0584cGGBkhV6mplaCdNFibJqnyf957efc5
k. Admin menghapus post
Method : DELETE
URL : /api/posts/1
Authorization:
o Type: Bearer Token
o Isi Token yang telah di copy dari response saat login admin
(Admin berhak menghapus post.)