Last Updated on February 24, 2022 by
Kita sering sekali mendengar Laravel Airlock pada aneka tutorial belajar framework Laravel, tapi sudahkah Anda tahu apa itu Laravel Airlock?
Laravel Airlock adalah sebuah fitur yang sukses mencuri perhatian pengguna framework Laravel. Kemunculan pertama dari Laravel Airlock adalah pada Laravel 7, dan fitur ini pun masih banyak digunakan dalam produksi software sampai hari ini.
Apa itu Laravel Airlock dan bagaimana cara menggunakannya? Mari cari tahu ulasan lengkap seputar Laravel Airlock tutorial pada artikel seri belajar framework Laravel kali ini. Selamat membaca!
Table of Contents
Apa Itu Laravel Airlock dan Manfaatnya untuk Anda?
Sebelum lompat ke bagaimana cara memakai Laravel Airlock, Anda harus memahami betul-betul apa itu Laravel Airlock terlebih dahulu sebagai dasar belajar Laravel pemula. Laravel Airlock adalah fitur Laravel yang banyak dimanfaatkan developer untuk melakukan otentikasi Single Page Application (SPA).
Laravel Airlock adalah sistem yang berfungsi melengkapi fitur-fitur lain dalam Laravel untuk membuat beraneka fungsi autentikasi. Sebelum kehadiran Laravel Airlock, sesungguhnya sudah ada sistem serupa bernama Laravel Passport. Hanya saja, Laravel Airlock adalah fitur yang lebih canggih dibanding kawannya, si Laravel Passport.
Package Laravel Airlock mempunyai sistem yang lebih sederhana dan simpel untuk melakukan proses generate API Token. Inilah alasan mengapa banyak user beralih memakai Laravel Airlock karena proses generate tokennya yang tidak sekompleks Oauth. Sebagai catatan penting dalam belajar Laravel Pemula, ketika Anda mempelajari aspek token, maka Anda akan bersinggungan dengan Application Programmer Interface (API). API sendiri digunakan untuk memproteksi data-data pada aplikasi dari oknum-oknum nakal seperti hacker.
Jadi, dapat dikatakan bahwa Laravel Airlock adalah sebuah fitur khusus Laravel untuk membangun elemen keamanan berbasis autentikasi pada aplikasi. Laravel Airlock sendiri banyak digunakan untuk autentikasi SPA, aplikasi mobile, dan sistem lainnya yang menggunakan basis dasar token API. Kinerja Airlock juga sangat ringan. Pun Anda bebas memastikan setiap request API sudah punya sesi otentikasi serta token yang valid untuk mengamankan data-data pada aplikasi.
Kelebihan dari menggunakan Laravel Airlock adalah waktu tokennya yang bisa bertahan lama (tidak cepat expired). Namun user juga bisa untuk menghapus (revoke) token kapanpun ia mau atau merasa perlu untuk menghapusnya.
Lebih jauh lagi, ada banyak manfaat lain dari menggunakan Laravel Airlock pada proses pengembangan aplikasi Anda. Beberapa manfaat tersebut adalah:
- Kinerja yang ringan dan cepat.
- Bisa mengakses beragam API Route di Laravel secara bersamaan memakai web guard.
- Bisa otomatis menyimpan session dari suatu ID user sehingga user tersebut tidak perlu melewati proses autentikasi request berkali-kali.
- Lebih mudah untuk mengatur kinerja autentkasi pada front end aplikasi atau website.
Seperti Apa Cara Kerja Laravel Airlock?
Ini adalah pertanyaan utama kita semua: bagaimana cara keja dari Laravel Airlock? Tenang, kami sudah mempersiapkan Laravel Airlock tutorial yang bisa Anda simak sekarang.
Mari kita mulai dengan gambaran besar cara kerja Laravel Airlock. Untuk Anda yang pernah memakai Laravel Passport, mungkin perasaan Anda tidak akan jauh berbeda saat berpindah ke Airlock. Fitur-fitur dan fungsi antara Airlock dan Passport tidak jauh berbeda, keduanya bisa Anda gunakan untuk melakukan otentikasi stateless. Jadi, untuk bisa mengimplementasikan autentikasi Airlock ke sistem aplikasi, Anda perlu memiliki data-data terkait user seperti ID. Data-data tersebut yang akan dikirim sebagai request ke API dalam proses identitas session.
Jika sumber request terpercaya, maka sistem Airlock selanjutnya akan menjalankan middleware EnsureFrontendRequestsAreStateful guna memastikan route API Anda menjadi stateful. Selain itu, Laravel Airlock juga akan mengecek jika request datang dari domain yang sudah pernah dikonfigurasi di airlock.stateful atau datang dari source yang lain.
Kalau request user datang dari sumber yang sama, selanjutnya Laravel Airlock akan mengirimkan data-data berupa: StartSession, EncryptCookies, VerifyCsrfToken, dan AddQueuedCookiesToResponse. Keempat data inilah yang akan mengizinkan request user untuk memakai web guard Laravel. Hasilnya, sistem autentikasi yang tadinya stateless akan menjadi stateful.
Untuk lebih jelasnya, tahapan-tahapan penggunaan Laravel Airlock adalah sebagai berikut:
Menginstal dan Mengonfigurasi Airlock
Pertama, lakukan instalasi Laravel Airlock. Seperti yang sudah dijelaskan sebelumnya, Laravel Airlock adalah fitur yang terdapat pada Laravel 7. Jadi, Anda harus menginstal Laravel 7 terlebih dahulu. Caranya:
- Buka Command Line.
- Ketik kode berikut: composer create-project –prefer-dist laravel/laravel dw-airlock
- Cek kembali semua persyaratan (requirement) instalasi terpenuhi. Klik ‘run’. Proses instal akan berlangsung otomatis.
- Begitu selesai, buka folder ‘dw-airlock’ > cari ‘Laravel Airlock’ > install memakai command:
composer require laravel/airlock
Begitu instalasi selesai, lanjutkan prosesnya dengan konfigurasi. Konfigurasi dilakukan dengan cara berikut:
- Buka command > input perintah:
php artisan vendor:publish –provider=”Laravel\Airlock\AirlockServiceProvider”
- Buka file .env > masukkan informasi database Anda. Contoh:
DB_CONNECTION=mysql
DB_HOST=128.0.0.1
DB_PORT=3205
DB_DATABASE=dw-airlock
DB_USERNAME=admin
DB_PASSWORD=midam
- Publish konfigurasi.
- Saat mempublish konfigurasi, Anda bisa sekalian membuat file migration > gunakan kode perintah artisan ini untuk melakukan generate pada struktur database:
php artisan migrate - Lakukan register middleware Airlock ke route API: buka file app/Http/Kernel.php > modifikasi fungsi $middlewareGroups > ubah API menjadi contoh:
'api' => [
EnsureFrontendRequestsAreStateful::class,
'throttle:60,1',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
- Hubungkan ke user: buka file app/User.php > tambahkan kode ini dan modifikasi:
<?php
namespace App;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Airlock\HasApiTokens;
class User extends Authenticatable
{
use Notifiable, HasApiTokens;
Selesai.
Lakukan Autentikasi dan Meng-generate Token
Di sini Anda bisa membuat fitur autentikasi untuk memungkinkan user melakukan generate sejumlah token. Caranya adalah:
- Buat dummy user dengan cara melakukan generate seeder:
command php artisan make:seeder UserTableSeeder
- Buka file database/seeds/UserTableSeeder.php
- Lakukan konfigurasi berikut:
<?php
use Illuminate\Database\Seeder;
use App\User;
class UserTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
User::create([
'name' => 'Ayu Dewi’,
'email' => 'admin@appkey.id',
'password' => asdkfhl('secret')
]);
}
}
- Lakukan implementasi data memakai kode artisan php artisan db:seed–class=UserTableSeeder.
- Gunakan 1 controller untuk membuat dan menjalankan fitur-fitur yang dibutuhkan > buka command line > generate new controller (php artisan make:controller UserController).
public function login(Request $request)
{
$this->validate($request, [
'email' => 'required|email|exists:users,email',
'password' => 'required',
'type' => 'required'
]);
$user = User::where('email', $request->email)->first();
if (!Hash::check($request->password, $user->password)) {
return response()->json(['status' => 'failed', 'data' => 'Password Salah']);
}
return response()->json(['status' => 'success', 'data' => $user->createToken($request->type)->plainTextToken]);
}
- Terakhir dalam proses ini, buat API yang diproteksi dengan otentikasi. Input kode metode berikut pada file yang sama dengan di atas:
public function index() { $users = User::orderBy(‘created_at’, ‘DESC’)->paginate(10); return response()->json([‘status’ => ‘success’, ‘data’ =>$users]); }
- Input juga kode tambahan: use Illuminate\Support\Facades\Hash; use App\User;
- Lakukan definisi routing untuk kedua fungsi di file routes/api.php dan modifikasi struktur kode seperti contoh:
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
Route::group(['middleware' => 'auth:airlock'], function() {
Route::get('/users', 'UserController@index');
});
Route::post('/login', 'UserController@login');
Mengeset Abilities untuk Token
Anda bisa memberikan abilities untuk setiap token. Abilities yang diberikan akan menjadikan user mampu mengakses fitur-fitur tertentu yang telah ditetapkan pada token. Cara mengeset abilities adalah:
- Buka command line > buat migration baru:
php artisan make:migration add_field_role_to_users_table
Modifikasi file migration baru:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddFieldRoleToUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->enum('role', ['admin', 'users'])->after('password');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('role', ['admin', 'users']);
});
}
}
- Buka file ‘php’ > modifikasi:
<?php
use Illuminate\Database\Seeder;
use App\User;
class UserTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
User::truncate();
User::create([
‘name’ => ‘Ayu Dewi,
’email’ => ‘admin@appkey.id’,
‘password’ => asdfghjkl(‘secret’),
‘role’ => ‘admin’
]);
User::create([
‘name’ => ‘Bagas Dewa’,
’email’ => ‘bagas@daengweb.id’,
‘password’ => asdfghjkl(‘secret’),
‘role’ => ‘users’
]);
}
}
- Jalankan seeder memakai command php artisan db:seed –class=UserTableSeeder.
- Modifikasi metode login: buka file ‘UserController.php’ > modifikasi:
public function login(Request $request)
{
$this->validate($request, [
'email' => 'required|email|exists:users,email',
'password' => 'required',
'type' => 'required'
]);
$user = User::where('email', $request->email)->first();
if (!Hash::check($request->password, $user->password)) {
return response()->json(['status' => 'failed', 'data' => 'Password Salah']);
}
$abilities = $user->role == 'admin' ? ['user:index', 'user:create']:['user:index'];
return response()->json([
'status' => 'success',
'data' => $user->createToken($request->type, $abilities)->plainTextToken
]);
}
- Lakukan modifikasi metode index:
public function index()
{
$user = request()->user(); //GET USER LOGIN
if ($user->tokenCan('user:index')) {
$users = User::orderBy('created_at', 'DESC')->paginate(10);
return response()->json(['status' => 'success', 'data' =>$users]);
}
return response()->json(['status' => 'failed', 'data' => 'Unauthorized']);
}
public function store(Request $request)
{
$this->validate($request, [
'name' => 'required|string',
'email' => 'required|email|unique:users',
'password' => 'required',
'role' => 'required',
]);
$user = $request->user(); //GET USER LOGIN
if ($user->tokenCan('user:create')) {
User::create($request->all());
return response()->json(['status' => 'success']);
}
return response()->json(['status' => 'faield', 'data' => 'Unauthorized']);
}
- Terakhir, buka routes/api.php > tambahkan route ke middleware route group:
Route::post('/users', 'UserController@store');
Melakukan Penghapusan / Revoking Token
Seperti yang sudah sempat disinggung pada poin sebelumnya, Anda bisa melakukan revoking atau menghapus token jika sudah tidak dipakai kembali. Untuk melakukan revoking token, lakukan langkah-langkah berikut:
- Buka file ‘UserController.php’ > tambahkan method:
public function getAllUserToken() { $users = request()->user(); return response()->json([ ‘status’ => ‘success’, ‘data’ => $users->tokens ]); }
- Ubah method di atas menjad route: buka ‘routes/api.php’ > input route:
Route::get('/users/tokens', 'UserController@getAllUserToken');
- Untuk menghapus token, maka user akan memerlukan ID yang diterima (hanya token berdasar ID inilah yang akan dihapus, sementara semua token akan terhapus jika parameternya tidak bermuatan alias kosong).
- Menghapus token: buka file ‘UserController.php’ > input method:
public function revokeToken()
{
$user = request()->user(); //GET USER LOGIN
if (request()->token_id) {
$user->tokens()->where('id', request()->token_id)->delete();
return response()->json(['status' => 'success']);
}
$user->tokens()->delete();
return response()->json(['status' => 'success']);
}
- Terakhir, buka routes/api.php > input kode:
Route::get('/users/delete', 'UserController@revokeToken');
Selesai. Token API Anda sudah terhapus. Kalau Anda ingin melakukan uji coba, silahkan jalankan kode: namadomainAnda/api/users/delete?id_token=.
Demikianlah pembahasan artikel seri belajar Laravel pemula kali ini tentang Laravel Airlock tutorial. Bagaimana, menarik bukan pembahasan belajar framework Laravel di atas? Semoga tulisan kali ini mampu menambah wawasan dan pengetahuan Anda seputar Laravel Airlock, ya!
Terima kasih sudah membaca, dan nantikan lebih banyak artikel seri belajar Laravel dan trik pemrograman lainnya hanya dari Appkey.id. Sayonara!
Jasa Pembuatan Aplikasi, Website dan Internet Marketing | PT APPKEY
PT APPKEY adalah perusahaan IT yang khusus membuat aplikasi Android, iOS dan mengembangkan sistem website. Kami juga memiliki pengetahuan dan wawasan dalam menjalankan pemasaran online sehingga diharapkan dapat membantu menyelesaikan permasalahan Anda.