Membuat API Authentication Di Laravel

Untuk authentication API pada laravel 10 secara default menggunakan Sanctum. Beberapa fitur sanctum adalah :
- Menyediakan sistem authentication yang ringan
- Bisa berjalan pada SPA dan Mobile Application
- Authentication berbasis token. Sehingga pengguna dapat login dari berbagai perangkat
- Token juga bisa memilik scope dan hak akses untuk API tertentu
Untuk memastikan apakah sanctum sudah terinstall atau belum. bisa cek file composer.json jika ada laravel/sanctum berarti sudah terinstall. jika belum maka harus diinstall dulu dengan menjalankan perintah dibawah ini :
composer require laravel/sanctumSelanjutnya melakukan publish pada konfigurasi sanctum dengan menjalankan perintah
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"Dan langkah terakhir adalah melakukan database migration untuk membuat table personal_access_token. dimana tabel ini dibutuhkan oleh sanctum untuk menyimpan token setiap user. Sehingga dengan tabel ini setiap user bisa memiliki lebih dari satu token jika user login dari device yang berbeda. berikut perintah untuk membuat tabel yang dibutuhkan sanctum
php artisan migrateSelanjutnya kita akan membuat function authentication pada file api.php yang terletak di folder router. contoh lengkapnya bisa dilihat pada code dibawah ini
Route::post('auth', function (Request $request) {
$request->validate([
'email' => 'required|email',
'password' => 'required',
]);
$user = User::where('email', $request->email)->first();
if (! $user || ! Hash::check($request->password, $user->password)) {
throw ValidationException::withMessages([
'email' => ['The provided credentials are incorrect.'],
]);
return response()->json([
'status' => '401',
'message' => 'Unauthorized',
]);
}else{
return response()->json([
'token' => $user->createToken($request->email)->plainTextToken
]);
}
})->name('auth');Sebelum mecoba code ditas pastikan tabel users sudah berisi satu user atau lebih. sebagai bahan uji coba. Jika sudah ada user-nya selanjutnya kita memerlukan aplikasi Postman, yaitu aplikasi free untuk menguji RESTful API. Jika belum punya silahkan Download
Selanjutnya buka aplikasi postman dan buat new workspace dan isi formnya dan klik Create Worksapece
Selanjutnya lakukan seperti di gambar :
- Pilih Method Post
- Isi url http://127.0.0.1:8000/api/auth
- Pada tab body pilih x-www-form-urlencoded
- dana isi username dan password
- Lalu tekan tombol send. Jika tidak ada kendala maka server akan memberika respons token. yang akan digunakan sebagai authentication
Untuk menggunakan token tersebut lakukan seperti pada gambar dibawah ini
- Pilih method get
- Isi url https://127.0.0.1:8000/api/user
- Pilih tab Authorization
- Pilih Type Bearer
- Paste tokon di form token
- Lalu Klik tombol send
Jika tidak ada kendala maka server akan merespon dengan memberakan informasi user. seperti contoh dibawah ini
{
"id": 1,
"name": "Ahmad",
"email": "ahmad@mail.com",
"email_verified_at": null,
"created_at": null,
"updated_at": null
}Langkah terakhir kita membutuh router dengan nama login dengan method get. dimana router ini berfungsi sebagai pengalih saat user tanpa login mengakses API yang memerlukan authentication. letakkan code ini di file api.php
Route::get('login', function (Request $request) {
return response()->json([
'status' => '401',
'message' => 'Unauthenticated',
]);
})->name('login');Semoga Bermanfaat & Terima Kasih....
Tambahan
Membuat Group Route yang Memerlukan Authentication
pada file api.php buat contoh kode seperti dibawah ini
Route::middleware('auth:sanctum')->group(function () {
Route::apiResource('pegawai', PegawaiController::class);
Route::apiResource('transaksi', TransaksiController::class);
Route::apiResource('barang', BarangController::class);
});Pada route yang berada di dalam group auth:sanctum seperti route pegawai, transaksi & barang. Maka saat diakses akan meminta authentication.
Membuat Logout pad RESTful API
Pada file route/api.php tambahkan kode logout di bawah ini
Route::middleware('auth:sanctum')->get('logout', function (Request $request) {
return $request->user()->currentAccessToken()->delete();
});Untuk mengakses route logout user harus sudah ter-authentication. Saat mengkases route ini maka sistem akan menghapus token yang sedang digunakan untuk melakukan logout.
Pada laravel terdapat fungsi untuk menghapus semua token yang dimiliki oleh user yaitu dengan menulis kode ini di route logout
Route::middleware('auth:sanctum')->get('logout', function (Request $request) {
return $request->user()->tokens()->delete();
});fungsi ini sangat efektif saat user ingin logout dari semua device yang dia miliki dengan hanya sekali logout
Selain itu laravel memilik fungsi untuk logout hanya pada device tertentu. Seperti di bawah ini
Route::middleware('auth:sanctum')->get('logout', function (Request $request) {
// Revoke a specific token...
return $request->user->tokens()->where('id', $tokenId)->delete();
});fungsi ini sangat berguna saat ada perangkat baru yang berhasil masuk sedangkat perangkat baru tersebut tidak dikenali oleh user. Sehingga dengan fungsi diatas user bisa memerintah logout pada perangkat baru yang tidak dikenal