Tutorial RESTful API Laravel 9 : Implementasi JWT Authentication

Membuat Rest API merupakan hal umum yang harus dikuasai oleh seorang Backend Engineer, API sendiri digunakan untuk berkomunikasi atau bertukar data dari satu aplikasi ke aplikasi lain. Ada banyak bahasa pemograman yang biasa digunakan oleh programmer untuk membuat API, misalkan Go, JavaScript, Python dan tentu saja PHP. Di tutorial kali ini Saya mau share bagaimana membuat API sederhana (Login, Register, Logout) dengan framework Laravel 9 dan juga implementasi JWT untuk autentikasinya.

Goal dari artikel ini adalah kalian paham membuat API, installasi package php-jwt, dan cara menggunakannya.

Persiapan

Untuk mengikuti tutorial ini pastikan pada komputer kalian terinstall

Pengertian Singkat JWT

Autentikasi adalah proses identifikasi pengguna, merupakan hal krusial dalam sebuah aplikasi, dengan autentikasi aplikasi dapat memastikan apakah user dapat melakukan suatu tugas tertentu atau tidak. Tanpa autentikasi keamanan data tidak dapat terjamin, bisa dibayangkan seandainya ada data penting bisa diakses oleh semua orang. Dalam konteks rest API salah satu cara autentifikasi adalah menggunakan token, library yang banyak digunakan adalah JWT (JSON Web Token). JWT membuat token dari string random yang terdiri dari 3 bagian, nantinya token ini yang akan kita gunakan untuk autentikasi.

Contoh tokennya adalah seperti berikut:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJuYW1lIjoiTmlja3kiLCJhZ2UiOjE5fQ. iMA4D79Sfz0gWzCf70w7oZ9sZmyRkcaGE43IeFGni9A

Bila kita perhatikan terdapat titik sebagai pemisah pada sebuah token, bagian pertama adalah header, yang kedua adalah payload, yang ketika adalah signature

Header : Menyimpan algoritma yang digunakan dalam token tersebut

Payload : Menyimpan data apa saja yang merupakan inti dari token ini, contoh data yang umum disimpan kedalam payload adalah username, email

Signature : Frasa yang digunakan untuk memberitahukan server bahwa token ini benar berasal dan dibuat oleh server tersebut.

Untuk menggunakan token JWT pada rest API dapat ditambahkan pada request header berupa Authorization : Bearer token

Install Laravel 9

Langkah pertama tentu saja menginstall laravel di device kita, disini Saya akan menggunakan composer untuk menginstall laravel dan sebagai contoh Saya akan membuat project Contact

Konfigurasi Database

Buatlah database dengan phpmyadmin atau database tool lainnya, beri nama database contact

Edit juga file .env, sesuaikan dengan settingan MySQL di device kalian

Secara default Laravel sudah membuat file migration yang berisi beberapa table salah satunya table user, kita tinggal lakukan migrasi table user saja, nantinya secara otomatis akan membuat table user di database kita.

Installasi JWT

Setelah database sudah tersetup, sekarang kita install package Laravel JWT dari php-open-source-saver/jwt-auth

Jalankan perintah berikut

Setelah selasai langkah selanjutnya adalah mencopy file configurasi jwt ke folder config/jwt.php dengan perintah ini:

Kemudian buat secret key yang akan digunakan untuk menghandle enkripsi token.

Konfigurasi Guard

Pada file config/auth.php , perlu disesuaiakan supaya si Laravel bisa menggunakan JWT sebagai default authentifikasinya.

Ubah dari

Menjadi

Kemudian pada Authentication Guards tambahkan

Modifikasi Model User

Kita perlu mengimplementasikan PHPOpenSourceSaver\JWTAuth\Contracts\JWTSubject ke dalam model User

Menambahkan Middleware

Tak ketinggalan kita juga perlu menambahkan middleware yang digunakan sebagai penengah sebelum request kita masuk ke dalam controller. Di dalam middleware yang akan kita buat berisikan konfigurasi request header dan pengecekan token JWT

buat middleware dengan command berikut

Laravel akan mengenerate file middleware yang berada di app\Http\Middleware

Edit file JwtMiddleware.php

Supaya middleware ini dapat digunakan, tentu saja harus didaftar dulu di app\Http\Kernel.php pada

Membuat AuthController

Nah sekarang masuk ke inti tutorial, buat Controller yang digunakan untuk register, login, dan logout.

Kemudian sesuaikan kode-nya seperti berikut

Setup routes

Karena ini API file routes yang harus diedit adalah routes/api.php

Tambahkan paling atas

Uji Coba

Untuk mencoba, jalankan perintah:

Buka postman/insomnia, arahkan urlnya ke http://localhost:8000/api

Uji Register

laravel 9-jwt-auth

Uji Login

laravel 9-jwt-auth

Uji Logout

laravel 9-jwt-auth

Implementasi Dengan Controller

Supaya bisa mencoba dengan ada contohnya, Saya tambahkan sebuah endpoint baru bernama contact, endpoint tersebut hanya bisa diakses dengan menggunakan token.

Buat Model, Migration dan Controller

Jalankan perintah untuk membuat model, migration dan controller sekaligus
php artisan make:model Todo -mc
Edit file migration yang berada di database/migrations/…create_contacts_table

Sesuaikan juga modelnya

Jalankan migrate

Edit file controller ContactController.php

Tambahkan ke dalam routes

Nah untuk menambahkan pengecekan, apakah request yang dijalankan sudah ada tokennya atau belum, kita panggil middleware yang telah dibuat tadi dengan function middleware(‘namamiddleware’) kita dapat menambahkannya pada routes

Uji Coba

Sebelum melakukan uji coba, jalankan login dahulu untuk get token, lalu gunakan token tersebut dalam setiap request, kalau di insomnia pada tab kedua ada Tab Auth, pilih bearer, isikan token yang didapat.

Create Contact

laravel-9-jwt-auth-example

Update Contact

laravel-9-jwt-auth-example

List Contact

laravel-9-jwt-auth-example

Get single contact

laravel-9-jwt-auth-example

Delete Contact

laravel-9-jwt-auth-example

Request tanpa token

laravel-9-jwt-auth-example

Okei sampai disini sudah selesai, semoga bermanfaat 🙂

Referensi

https://laravel-jwt-auth.readthedocs.io/en/latest/quick-start/