Membuat Autentikasi API Token di Laravel
Sebelumnya saya pernah menulis bagaimana membuat OAuth 2.0 Server di laravel menggunakan Laravel Passport.
Kali ini bahasanya masih sedikit sama, mengenai otentikasi REST API pada framework Laravel. Apabila di Laravel Passport harus menginstall package lagi, pada tutorial kali ini saya akan menggunakan metode API Token, sehingga tidak perlu menginstall package lain karena fitur ini sudah ada pada Laravel secara Out of the box.
Menurut saya laravel passport lebih ditujukan untuk proyek aplikasi dengan skala besar, tapi jika ingin autentikasi yang simple untuk mengamankan endpoint API kamu, lebih baik mencoba metode API Token terlebih dahulu.
Buat Proyek Laravel
Mari kita buat proyek baru menggunakan PHP Composer.
composer create-project --prefer-dist laravel/laravel laravel-api
Proses di atas bisa memakan waktu yang cukup lama, bergantung dari koneksi internet.
DISCLAIMER: Pada saat tulisan ini dibuat, Laravel yang diinstall adalah versi 5.4.9
Setelah installasi selesai, buat database MySQL (Boleh pakai yang lain) lalu isikan kredensial database kamu di file .env
seperti contoh di bawah ini:
Setelah konfigurasi sudah benar, sekarang jalankan perintah di bawah ini untuk memastikan apakah sudah berjalan dengan baik.
php artisan migrateOutput:
Migration table created successfully.
Migrated: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_100000_create_password_resets_table
Scaffolding Auth
Seperti yang saya bilang tadi, untuk membuat sistem autentikasi di laravel sangat mudah, cukup jalankan Auth Scaffolding kita akan mendapatkan fitur login, reset password dan juga register user.
Jalankan perintah artisan ini di terminal / console
php artisan make:authOutput:
Authentication scaffolding generated successfully.
Sekarang coba untuk menjalankan aplikasi Laravel kita dengan perintah artisan berikut ini
php artisan serve
Lalu buka browser dan arahkan pada alamat http://localhost:8000 jika berhasil maka akan terdapat menu login dan register.
API Endpoint
Sekarang mari kita coba panggil API endpoint yang sudah disediakan oleh laravel pada saat menginstallnya. Untuk menguji bisa menggunakan Postman ataupun Curl.
Untuk mengakses API kita harus mengirim minimal 2 buah header parameter, yaitu:
Accept
:application/json
maksudnya request saya berharap mendapatkan balasan berupa format jsonAuthorization
:apiKeyKamuxxxx
ini adalah api key yang kita gunakan untuk mengenali siapa kita (si pembuat http request)
Pada contoh di atas, saya mencoba untuk mengakses endpoint api dengan middleware api:auth
. Bisa di chek dengan perintah:
php artisan route:list
Pada contoh postman saya, muncul error seperti ini
SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘api_token’ in ‘where clause’ (SQL: select * from `users` where `api_token` = xxx limit 1)
Itu karena kita belum menambahkan sebuah field bernama api_token
pada tabel user.
Alter users
Table
php artisan make:migration add_api_token_field_users --table=usersOutput:
Created Migration: 2017_02_10_164751_add_api_token_field_users
Lalu edit file migration tersebut menjadi seperti berikut
Jalankan perintah migrate
php artisan migrate
Jika kita coba lagi di Postman maka hasilnya akan seperti di bawah ini, karena tidak ada record user dengan api_token
xxx.
User Dummy
Untuk membuat user dummy, bisa menggunakan Database Seeder atau juga bisa menggunakan Laravel Tinker, tapi sayang sekali pada versi 5.4 ini laravel tinker sudah tidak di masukkan ke core laravel lagi, jadi harus install manual untuk menggunakan fitur laravel tinker.
Daripada ribet install package lagi, lebih baik kita pakai seeder saja, buat seeder.
php artisan make:seeder UserSeeder
Edit file tersebut, ada di folder database/seeds
Jalankan perintah seed
php artisan db:seed --class=UserSeeder
Test
Sekarang coba lagi jalankan request di postman seperti contoh sebelumnya, tapi dengan api_token
yang valid.
NOTE: Untuk mendapatkan
api_token
silahkan melihat di database masing masing (menggunakan PHPMyAdmin, Sequel Pro, MySQL Workbench, etc). Sebenarnya ada cara mudah untuk melihatapi_token
menggunakan laravel tinker, lagi lagi karena masalah yang sudah saya sebutkan tadi saya tidak menggunakan cara ini.
Uji coba pertama dengan api token yang valid
Waduh, api_token
kelihatan pada response json kita, padahal token tersebut sangat rahasia karena berfungsi sebagai pengganti username dan password untuk autentikasi user. Untuk menyembunyikanya, perlu sedikit sentuhan pada file app/User.php
Tambahkan 'api_token'
pada variabel $hidden
sehingga menjadi seperti ini
protected $hidden = [
‘password’, ‘remember_token’,’api_token’
];
Coba lagi dan, huwala…
Penggunaan Token
Setiap request ke url / route yang menggunakan middleware api:auth
maka harus menyertakan header Authorization
dengan parameter Bearer apitokenkamuh
Github Repo
Jika ada yang berminat tutorial dalam bentuk video, bisa diungkapkan melalui response. Namun apabila tulisan ini sudah cukup jelas, semoga bermanfaat. Jika kamu suka dengan artikel ini jangan lupa klik 💚 dan share ke teman teman.
Tidak ada komentar:
Posting Komentar