Halo sobat Newbie, pada kesempatan kali ini kita akan membahas PHP Lumen Authentication. Tutorial ini melanjutkan Lumen Framework #2 Tentu dalam menerapkan authentication ini kita gunakan, project lumen sebelumnya yang telah terdapat tabel users yang nanti akan kita buat authentikasinya. 

Pertama kita pastikan dulu terdapat tabel users pada database kita.

Kemudian kita pastikan terdapat model User, untuk default dari lumen sendiri sudah terdapat model Users pada folder app\User.php

Sekarang kita akan membuat routing untuk function register, masuk ke routes/web.php

Buat file baru app/Http/Controllers/AuthController.php, code nya seperti dibawah ini.

Pada kode diatas, kita melakukan validasi inputan dulu, maka kita coba dengan inputan negative case, maka hasilnya akan seperti berikut.

Lalu kita coba dengan inputan yang valid.

Instalasi dan Konfigurasi JWT untuk Lumen
Ketika kita login, maka kita akan mengembalikan Token login yang bisa digunakan sebagai penanda sesi Login. Untuk membuat Token ini, kita akan menggunakan plugin JWT untuk Lumen. Mari kita ikuti langkah-langkah dibawah ini:

Jalankan command berikut di command prompt (harus connect internet).
composer require tymon/jwt-auth:dev-develop
Ketika berhasil, maka file composer.json, akan berubah seperti berikut. 

Buka file bootstrap/app.php, uncomment pada line 80, lalu tambahkan perintah seperti dibawah ini.

Jalankan command di di command prompt.
php artisan jwt:secret

Buka file .env, apabila berhasil maka akan ada tampilan pada line 21


Membuat fungsi Login
Untuk membuat fungsi login, pertama kita buka bootstrap/app.php, lalu cari block ‘Register Middleware’, kemudian uncomment pada perintah berikut.

Setelah itu kita modifikasi model User.php, tambahkan JWTSubject pada implements, serta buat function baru getJWTIdentifier() & getJWTCustomClaims()

Lakukan konfigurasi pada vendor/laravel/lumen-framework/config/auth.php, cari block ‘Authentication Defaults’ kemudian masukkan kode berikut.

Car block ‘Authentication Guards’ dan masukka kode berikut.

Car block ‘User Providers’ dan masukkan kode berikut

Buka file routes/web.php, tambahkan routing baru untuk endpoint login.

Buka file app/Http/Controllers/AuthController.php, tambahkan function baru untuk login.

Selanjutnya tinggal melakukan test menggunakan postman, kita lakukan dengan email dan password yang salah terlebih dahulu, maka response akan seperti berikut.


Sekarang masukkan email dan password yang valid.

Membuat Authenticated Routing
Sekarang kita akan membuat routing ‘post’ menjadi tidak bisa diakses oleh user yang belum login, cukup dengan membungkus setiap routing ke dalam middleware auth seperti berikut. 

Sekarang kita coba akses endpoint /post dengan method get maka response akan 'Unauthorized'.

Mari kita tambahkan header Authorization dengan value [Bearer LOGIN_TOKEN]. Authorization ini akan digunakan sebagai sesi Login. Copy token yang kita dapatkan dari response login yang telah kita lakukan sebelumnya.

Masukkan ke dalam headers endpoint ‘/posts’ dengan key ‘Authorization’.

Indentifikasi User Login Authenticated Routing
Dari Token login yang dikirim, kita bisa melakukan identifikasi user. Sebagai contoh, kita hanya akan mengembalikan list posts berdasarkan posts.user_id = UserLogin.id

Pertama kita buka ap/Http/Controllers/PostController.php lalu ubah method index menjadi seperti berikut. Lihat line 15.

Lalu lakukan test di postman, masukkan endpoint /posts dengan method get, maka response akan seperti berikut.

Sekian tutorial kali ini, semoga bermanfaat.