Laravel — Sanctum Authentication
Halo, diartikel ini saya akan sharing sesuatu terkait laravel. Sesuai judulnya kali ini saya akan share tentang fitur authentication di laravel yaitu laravel/sanctum. Walaupun fitur ini udah lama keluar tapi gapapa lah ya namanya juga sharing 😁
Apa itu Laravel Sanctum ?
Simplenya ini adalah package atau library yang dibuat oleh laravel untuk mempermudah kita dalam membangun sistem authentication berbasis api token untuk aplikasi web berbasis SPA dan atau aplikasi berbasis mobile.
Jadi dalam proses pembuatan sistem authentication pastinya akan sangat mudah dan aman dikarenakan ini merupakan library dari laravelnya langsung.
Prerequisite
Sebelum memulai, teman-teman diharapkan sudah mempunyai tools di bawah ini.
- Code Editor (Sublime Text, Vs Code)
- API Client (Postman, Insomnia)
- Dan Composer sebagai depedency manager
Di artikel ini saya mengasumsikan bahwa kalian sudah menginstall php, database mysql/mariadb, serta web server (apache atau nginx). Serta saya juga mengasumsikan bahwa kalian mengerti apa itu API, cara pengunaan database serta basic-basic dari PHP dan Laravel
Di artikel ini, saya menggunakan VS Code sebagai code editornya dan Postman sebagai API Clientnya. Oke jika tools diatas sudah kita install, kita lanjutkan ke proses berikutnya.
1. Setup Project
Pertama-tama kita akan setup project laravel kita. Teman-teman bisa buka terminal atau command prompt dan arahkan ke direktori tempat teman-teman akan menyimpan projectnya.
Lalu teman-teman ketik:
composer create-project laravel/laravel sanctum-example
Perintah diatas akan membuatkan kita project laravel dengan nama “sanctum-example”. Setelah installasi beres, kita coba jalankan dahulu project laravelnya. Teman-teman bisa mengakses terlebih dahulu project nya dengan perintah:
cd sanctum-example
lalu ketik php artisan serve
untuk menjalankan laravelnya. Lalu lihat di terminal/command prompt teman-teman, akan ada link untuk membuka project kita. Copy link tersebut pada browser teman-teman maka hasilnya akan seperti ini.
Jika berhasil, maka tampilannya akan seperti gambar diatas. Tapi kali ini kita akan membuat API jadi kita tidak memerlukan browser.
2. Setup Database
Lalu setelah itu, kita akan setup databasenya. Pertama kita buat database. Teman-teman buka phpmyadmin lalu buat database dengan nama sanctum_example
Setelah itu, kita setting project laravel kita supaya terhubung ke database yang telah kita buat. Teman-teman bisa membuka code editor kesayangan teman-teman, lalu buka file.env
Jika teman-teman tidak ada file .env
teman-teman bisa copy isi file dari file .env.example
lalu buat file .env
Bisa dilihat dari gambar diatas. Kita akan ubah settingan databasenya menjadi seperti ini
DB_CONNECTION=mysqlDB_HOST=127.0.0.1DB_PORT=3306DB_DATABASE=sanctum_exampleDB_USERNAME=rootDB_PASSWORD=
Untuk username dan password bisa disesuaikan dengan settingan database teman-teman.
3. Setup Laravel-Sanctum
Lalu selanjutnya kita akan setup untuk laravel sanctumnya.
Pertama, kita install terlebih dahulu package laravel/sanctum nya. Pada terminal / command prompt ketikan
composer require laravel/sanctum
Setelah itu, masih pada terminal / command prompt ketikan
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
Perintah diatas berguna untuk mempublish atau membuat configurasi laravel/sanctum. Setelah selesai, bukan file app\Http\Kernel.php
lalu pada line 42
ubah settingannya menjadi seperti berikut
'api' => [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
Nah, proses setup dan install laravel/sanctum telah selesai. Secara otomatis, laravel akan membuatkan table default untuk keperluan autentikasi. Teman-teman bisa melihatnya pada folder database\migration
. Kita tidak akan menambah file migration lagi karena secara default sudah cukup untuk pembuatan authentication. Untuk itu kita hanya tinggal mengetikan
php artisan migrate
Perintah tersebut berguna untuk memanggil semua file migration.
Maka pada database kita sudah ada tabel-tabel seperti gambar berikut
Jika kita lihat tabel user
, maka teman-teman akan melihat kolom username
dan password
. Nah kita akan gunakan kedua kolom ini sebagai sistem login kita.
4. Membuat Seeder
Sebelum kita lanjut, kita harus membuat seeder telebih dahulu. Gunanya seeder ini adalah sebagai base data kita di database. Teman-teman pada terminal atau command prompt ketikan:
php artisan make:seeder UserSeeder
Perintah diatas akan membuatkan file UserSeeder.php
pada folder database\seeders
Lalu edit file UserSeeder.php
menjadi seperti ini
Disini, kita menggunakan queryBuilder dari laravel untuk memasukan data ke database. Maka dari itu, kita mengimport class Illuminate\Support\Facades\DB
. Lalu kita menggunakan helpers dari laravel yaitu bcrypt
untuk hashing password.
Setelah membuat UserSeeder
kita edit file DatabaseSeeder.php
pada folder database\seeders
. Ubah DatabaseSeeder.php
menjadi seperti ini
File seeder ini adalah file untuk memanggil semua class seeder. Maka dari itu di dalam fungsi run
kita panggil class UserSeeder
kita.
Setelah itu jalankan perintah:
php artisan db:seed
Perintah diatas berguna untuk memanggil seeder
. Maka secara otomatis tabel User
di database telah terisi data
5. Membuat API Authentication
Nah akhirnya kita berada pada tahap terakhir yaitu pembuatan API nya nih. Langsung saja kita lanjutkan
Buka file User.php
pada folder App\Models
Lalu edit menjadi seperti ini
Setelah itu kita akan membuat controller untuk membuat proses authentication nya. Jalankan perintah berikut pada terminal atau command prompt
php artisan make:controller AuthController
Maka secara otomatis file AuthController.php
telah dibuat pada folder App\Http\Controllers
. Lalu edit AuthController.php
menjadi seperti ini.
Lalu kita buat routing nya. Buka file api.php
pada folder routes
. Lalu edit menjadi seperti ini
Bisa kita lihat, kita menambahkan middleware auth:sanctum
pada route /logout
dan /user
artinya, endpoint ini di proteksi oleh laravel sanctum bahwa jika kita ingin mengakses endpoint tersebut, kita harus login terlebih dahulu.
Oke, pembuatan API akhirnya telah selesai🎉. Saatnya kita tes API kita, sekarang teman-teman buka postman lalu buat request baru dengan method POST. Kita tes fungsi login kita
Pertama kita coba menggunakan password yang salah
Bisa kita lihat, kita mendapat response bahwa akun kita tidak ditemukan. Lalu kita tes jika kita menggunakan password yang benar
Ketika kita klik tombol SEND, maka kita akan mendapat response bahwa kita berhasil login dan kita mendapat token sebagai kunci untuk request ke endpoint lainnya.
Oke untuk mencobanya, mari kita tes ke endpoint /user
Bisa kita lihat, jika kita mengakses /user
tanpa disertai token, maka kita akan mendapatkan pesan Unauthenticated
artinya kita dianggap belum melakukan login. Untuk itu kita perlu menyertakan token yang telah kita dapat sebelumnya.
Jika kita menyertakan token kita pada headers, maka kita bisa melihat hasil response data kita seperti nama dan email.
Oke kita lakukan tes terakhir yaitu logout. Untuk logout sama seperti endpoint /user
kita harus menyertakan token kita
Oke, semua endpoint telah kita coba dan tidak ada error.
Oke sampe disini dulu artikel ini. Semoga kalian tidak kesulitan dalam mempraktekannya. Dan yang lebih penting lagi, semoga artikel ini bermanfaat untuk kita semua dan memberikan ilmu baru untuk kita.
Dah sampai ketemu di artikel berikutnya 👋👋👋