Laravel merupakan salah satu framework atau kerangka kerja yang dapat membantu programmer dalam pengembangan website berbasis PHP.
API (Application Programming Interface) atau biasa juga dikenal dengan Web Service digunakan untuk menghubungkan atau mengintegrasikan dua bagian aplikasi yang berbeda secara bersamaan, biasanya digunakan untuk pengembangan aplikasi yang berbasis mobile.
Passport merupakan salah satu proyek laravel yang dikembangkan untuk melakukan otentikasi berbasis token.
Kurang lebih kegunaannya sama dengan kegunaan Passport di dunia nyata, yaitu sebagai tanda pengenal yang memuat identitas kita.
Kali ini kita membuat API dengan fungsi sebagai berikut:
- API Login
- API Register
- API User Profile
- API Logout
Yuk langsung aja kita lihat...
1. Membuat API dengan Laravel
Silakan buat project laravel terlebih dahulu. Versi Laravel yang saya gunakan pada tutorial kali ini adalah versi 7.
composer create-project --prefer-dist laravel/laravel BelajarAPI
Agar bisa menggunakan passport kita harus menginstal packagenya terlebih dahulu dengan perintah berikut:
composer require laravel/passport
Setelah selesai menginstal laravel passport, silakan sesuaikan konfigurasi database yang kalian gunakan pada file .env
. Kemudian buka file config/app.php
dan tambahkan kode berikut di bagian providers
dan simpan:
Laravel\Passport\PassportServiceProvider::class,
Fungsinya apa?...
Fungsinya adalah untuk mendaftarkan passport pada laravel agar dikenali dan dapat digunakan.
Setelah disimpan silakan kamu jalankan perintah migrate
.
php artisan migrate
Setelah sukses migrasi database, langkah selanjutnya adalah membuat token keys dengan perintah:
php artisan passport:install
Perintah di atas akan mengenerate token keys dan disimpan di dalam database.
Langkah selanjutnya adalah melakukan konfigurasi pada bagian Model, Service Provider dan Config Auth.
Let's code...
1. app/User.php
Ubah file app/User.php
menjadi seperti berikut:
<?php
namespace App;
use Laravel\Passport\HasApiTokens;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
use HasApiTokens,Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
}
Jangan lupa untuk memasukkan use Laravel\Passport\HasApiTokens;
agar tidak terjadi error.
2. app/Providers/AuthServiceProvider.php
Ubah file app/Providers/AuthServiceProvider.php
seperti berikut:
<?php
namespace App\Providers;
use Laravel\Passport\Passport;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
Passport::routes();
//
}
}
3. config/auth.php
Ubah file config/auth.php
menjadi seperti berikut:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
]
Oke, konfigurasi sudah selesai.
Langkah selanjutnya adalah membuat route untuk API kita. Laravel menyedikan route khusus untuk API pada file routes/api.php
.
Buat route seperti berikut:
Route::prefix('auth')->group(function(){
Route::post('login','AuthController@login');
Route::post('register', 'AuthController@register');
Route::group(['middleware' => 'auth:api'], function(){
Route::get('user', 'AuthController@profile');
Route::get('logout', 'AuthController@logout');
});
});
Setelah membuat mendefinisikan route, langkah selanjutnya membuat AuthController dengan perintah:
php artisan make:controller AuthController
Perintah di atas akan otomatis membuat sebuah file controller di dalam folder app/Http/Controllers/
dengan nama AuthController.php
.
Tambahkan kode berikut pada file app/Http/Controllers/AuthController.php
.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controllers;
use App\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Validator;
class AuthController extends Controller
{
public function login()
{
if(Auth::attempt(['email' => request('email'), 'password' => request('password')])){
$user = Auth::user();
$response['status'] = true;
$response['message'] = 'Berhasil login';
$response['data']['token'] = 'Bearer ' . $user->createToken('LawanKovid')->accessToken;
return response()->json($response, 200);
}else{
$response['status'] = false;
$response['message'] = 'Unauthorized';
return response()->json($response, 401);
}
}
public function register(Request $request)
{
$validate = Validator::make($request->all(),[
'name' => ['string', 'required'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8']
]);
if($validate->fails()){
$response['status'] = false;
$response['message'] = 'Gagal registrasi';
$response['error'] = $validate->errors();
return response()->json($response, 422);
}
$user = User::create([
'name' => $request['name'],
'email' => $request['email'],
'password' => Hash::make($request['password']),
]);
$response['status'] = true;
$response['message'] = 'Berhasil registrasi';
$response['data']['token'] = 'Bearer ' . $user->createToken('LawanKovid')->accessToken;
return response()->json($response, 200);
}
public function profile()
{
$user = Auth::user();
$user = $user->makeHidden(['email_verified_at','password','remember_token']);
$response['status'] = true;
$response['message'] = 'User login profil';
$response['data'] = $user;
return response()->json($response, 200);
}
public function logout(Request $request)
{
$request->user()->token()->revoke();
$response['status'] = true;
$response['message'] = 'Berhasil logout';
return response()->json($response, 200);
}
}
Dari Langkah di atas kita sudah membuat fungsi untuk login, register, profile dan logout
.
Sekarang API yang telah kita buat siap kita gunakan, silakan jalankan perintah berikut untuk menjalankan project laravel:
php artisan serve
2. Uji Coba API
Sekarang API yang telah selesai kita buat siap diuji coba.
Untuk proses uji coba API ini kita dapat menggunakan Aplikasi Postman.
1. API Login
2. API Register
3. API User Profile
Untuk melakukan request User Profile cukup dengan tambahkan Authorizatio Header dengan value token yang di dapatkan dari request login atau register.
4. API Logout
Request Logout juga sama dengan request User Profile menggunakan Authorization Header.