Pada tutorial ini kita akan membahas cara membuat API otentikasi dengan laravel passport. Di tutorial ini menggunakan Laravel 9
Otentikasi sangatlah penting karena dengan adanya otentikasi dapat melakukan konfirmasi pada user untuk memberikan hak akses atas informasi tertentu. Biasanya otentikasi akan meminta input berupa username/email dan password.
Dalam API juga perlu menggunakan otentikasi karena tidak semua api yang kita buat bersifat public, maka dari itu perlu otentikasi untuk memberikan akses bagi user untuk mengakses api.
berikut ini tutorial cara membuat otentikasi api dengan laravel passport.
Menginstal Laravel Passport
Pertama kita buat dulu project laravelnya. kalian bisa menggunakan perintah berikut pada terminal.
composer create-project --prefer-dist laravel/laravel APIotentikasi
kemudian kita memerlukan package laravel passport. kalian bisa menginstallnya dengan perintah berikut.
composer require laravel/passport
setelah berhasil menginstall laravel passport, silahkan kalian lakukan konfigurasi terlebih dahulu pada file .env setelah itu kalian bisa jalankan perintah berikut. untuk melakukan migrasi database.
php artisan migrate
setelah berhasil melakukan migrasi database, maka langkah selanjutnya membuat token keys dengan perintah berikut
php artisan passport:install
langkah selanjutnya kita perlu mendaftarkan passport pada laravel supaya dapat digunakan.
kalian buka file config/app.php dan tambahkan kode berikut pada bagian providers.
Laravel\Passport\PassportServiceProvider::class,
Melakukan Konfigurasi
silahkan kalian buka file app/User.php pada bagian use Laravel\Sanctum\HasApiTokens; kalian ubah menjadi seperti dibawah ini
use Laravel\Passport\HasApiTokens;
maka untuk keseluruhan pada file app/User.php seperti berikut ini
<?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', ]; }
setelah itu silahkan kalian buka file app/Providers/AuthServiceProvider.php
dan ubah menjadi seperti dibawah ini
<?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(); } }
kemudian kita melakukan configurasi auth. silahkan buka file config/auth.php kemudian pada bagian guards kalian tambahkan api. sehingga menjadi seperti ini
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ]
Membuat Controller
pertama kita buat dulu base controller yang digunakan untuk melakukan return respon paada api. silahkan ketik perintah berikut ini
php artisan make:controller Api\BaseController
setelah berhasil membuat base controller, silahkan buka file app/Http/Controllers/Api/BaseController.php
kemudian tambahkan kode berikut ini.
<?php namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use Illuminate\Http\Request; class BaseController extends Controller { public function resSuccess($data, $message) { $response = [ 'status' => 'success', 'payload' => [ 'data' => $data['user'], ], 'message' => $message, ]; if ($data['accessToken']) { $response['payload']['token'] = $data['accessToken']; $response['payload']['type'] = 'Bearer'; } return response()->json($response, 200); } public function resError($message, $code) { $response = [ 'status' => 'error', 'message' => $message, ]; return response()->json($response, $code); } }
kemudian kita akan membuat controller untuk otentikasi pada api yang akan kita buat. silahkan ketik perintah berikut.
php artisan make:controller Api\AuthController
perintah diatas berfungsi untuk membuat file controller secara otomatis dengan nama AuthController.php
silahkan kalian buka file controller yang telah dibuat tadi pada file app/Http/Controllers/Api/AuthController.php
kemudian tambahkan kode berikut ini.
<?php namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use App\Models\User; use Hash; use Auth; class AuthController extends BaseController { public function login(Request $request) { $data['user'] = User::where('email', $request->email)->first(); if ($data['user']) { if (Hash::check($request->password, $data['user']->password)) { $data['accessToken'] = $data['user']->createToken('accessToken')->accessToken; return $this->resSuccess($data, 'login successfully.'); } else { return $this->resError('Password mismatch', 401); } } else { return $this->resError('User does not exist', 401); } } public function register(Request $request) { $data['user'] = User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password), ]); $data['accessToken'] = $data['user']->createToken('accessToken')->accessToken; return $this->resSuccess($data, 'Registration successful'); } public function logout(Request $request) { $user = Auth::user()->token()->revoke(); return response()->json([ 'status' => 'success', 'message' => 'You have successfully logged out', ]); } }
Membuat Route
langkah selanjutnya kita akan membuat route API. Laravel menyediakan route khusus api di dalam file routes/api.php. silahkan buat route seperti berikut ini.
<?php use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; use App\Http\Controllers\Api\AuthController; /* |-------------------------------------------------------------------------- | API Routes |-------------------------------------------------------------------------- | | Here is where you can register API routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | is assigned the "api" middleware group. Enjoy building your API! | */ Route::post('login', [AuthController::class, 'login']); Route::post('register', [AuthController::class, 'register']); Route::group(['middleware' => ['auth:api']], function () { Route::post('logout', [AuthController::class, 'logout']); });
Menguji API
sekarang kita akan menguji apakah api yang telah kita buat berjalan dengan baik. kita jalankan dulu server nya dengan perintah berikut
php artisan serve
silahkan kalian buka aplikasi postman untuk melakukan pengujian pada api yang telah dibuat
pada penjelasan gambar diatas kita memilih method nya yaitu POST untuk mengirim request kemudian isi url sesuai dengan server yang dijalankan. setelah itu pada bagian body kemudian bagian raw dan ganti format dengan JSON. kemudian silahkan kalian buat json untuk name, email dan password. dan setelah itu pada bagian body merupakan data yang berhasil kalian daftarkan.
pada tahap login diatas penjelasannya mirip seperti dibagian register. perbedaannya terletak pada bagian url dengan data json yang diisi. pada bagian login mengisi data email dan password dengan format json.
okee langkah terakhir kita coba melakukan logout. silahkan kalian copy terlebih dahulu token yang kalian dapat ketika berhasil login.
untuk bagian logout silahkan kalian klik pada bagian Headers dan silahkan kalian buat KEY Authorization dengan value Bearer kemudian paste token yang didapat saat login.
Penutup
Sekian untuk tutorial cara membuat API otentikasi dengan Laravel Passport . Jika ada kesulitan kalian bisa komentar dibawah ini.