Home Mobile Membuat Restful API Authentication di Laravel 9 dengan Menggunakan Sanctum Package

Membuat Restful API Authentication di Laravel 9 dengan Menggunakan Sanctum Package

2

Hello sobat coders, pada kali ini kita akan praktik bagaimana cara membuat authentication dengan sanctum pakage. Sanctum merupakan laravel official package yang menyediakan featherweight authentication  system untuk SPA (single Page Application), mobile application dan API berbasis token sederhana. Sanctum memungkinkan setiap user API aplikasi menghasilkan beberapa token API untuk akun mereka. Token tersebut dapat diberikan kemampuan atau scope yang menentukan tindakan atau actions mana yang diizinkan untuk dilakukan oleh token tersebut. Pada langkah-langkah ini saya menggunakan PHP v 8.1.6, Laravel 9.21.6., text editor visual studio code dan aplikasi postman. Berikut merupakan langkah-langkahnya :

1.         Install Laravel

Pada langkah pertama adalah menginstall laravel. Pada langkah ini saya menggunakan composer global. Jika kalian sudah menginstall laravel installer, kalian bisa langsung saja menjalankan perintah laravel new laravel-sanctum. Dan jika kalian tidak menggunakan laravel installer atau terbiasa menggunakan composer, kamu bisa menjalankan perintah composer create-project laravel/laravel laravel-sanctum.

proses intsall laravel-sanctum

Setelah itu masuk ke direktori project,

cd laravel-sanctum

buka project dengan text editor, setelah berhasil menginstall laravel, sekarang kita bisa menjalankan perintah php artisan serve, lalu buka pada browser dengan URL 127.0.0.1:{port}. Gambar di dibawah ini merupakan tampilan dari laravel starter.

Tampilan Laravel Starter

2.         Set Up Database

Setelah menyelesaikan step pertama, lanjutkan dengan membuat database baru dan jangan lupa untuk menyesuaikan DB_DATABASE pada file .env. Untuk password menyesuaikan dengan Mysql masing-masing, jika Mysql nya terdapat password silahkan di isi passwordnya. Kemudian membuat database dengan nama laravel_sanctum pada phpmyadmin.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_sanctum
DB_USERNAME=root
DB_PASSWORD=password

3.         Install Laravel Sanctum

By default, versi terbaru Laravel sudah menyertakan Laravel Sanctum. Namun, jika pada file composer.json kamu tidak menyertakan laravel/sanctum, kamu dapat mengikuti petunjuk penginstalan di bawah ini.

composer require laravel/sanctum

Jalankan perintah seperti di atas untuk menginstall sanctum package pada laravel project

Selanjutnya, kita bisa mempublikasikan Sanctum configuration dan migration file menggunakan perintah artisan vendor:publish. File sanctum config akan ditempatkan di direktori config. Ketikan perintah berikut ke terminal yang ada di visual studio atau git bash.

php artisan vendor:publish –provider=”Laravel\Sanctum\SanctumServiceProvider”

4.         Set Up Model & Migration

Selanjutnya kita perlu melakukan set up pada file users migration. Disini kita hanya perlu menambahkan dua column yaitu photo, phone_number dari beberapa column yang telah ada sebelumnya.  Buka file pada directory database/migration/pilih file create_users dan sesuaikan isi nya seperti dibawah ini.

public function up()
{
Schema::create(‘users’, function (Blueprint $table) {
$table->id();
$table->string(‘photo’)->nullable();
$table->string(‘name’);
$table->string(’email’)->unique();
$table->timestamp(’email_verified_at’)->nullable();
$table->string(‘phone_number’);
$table->string(‘password’);
$table->rememberToken();
$table->timestamps();
});
}

Sekarang buat database dengan nama laravel_sanctum di PHPmyadmin dan kemudian kita bisa menjalankan perintah artisan migrate untuk memigrasi file-file migration menjadi table-table di database yang telah kita buat sebelumnya.

php artisan migrate

tampilan database setelah di migrate

Langkah selanjutnya adalah Silahkan buka file models/User.php, tambahkan photo dan phone_number pada method $fillable.

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
protected $fillable = [
‘photo’,
‘name’,
’email’,
‘phone_number’,
‘password’,
];
protected $hidden = [
‘password’,
‘remember_token’,
];
protected $casts = [
’email_verified_at’ => ‘datetime’,
];
}

4.         Membuat AuthController

Pada tahap ini kita akan membuat controller yang akan menangani proses register melalui API. Ketikan perintah tersebut pada git bash atau cmd yang directorynya sudah mengarah paha folder project kita (laravel-sanctum).

php artisan make:controller Api/AuthController

kemudian ada file baru yaitu AuthController.php di direktori app/Http/Controllers/Api. Buka file AuthController.php, lalu kita tambahkan method register(), login() dan logout() seperti dibawah ini:

<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;

class AuthController extends Controller
{
public function register(Request $request)
{
$validator = Validator::make($request->all(), [
‘photo’ => ‘image|mimes:jpeg,png,jpg|max:5048’,
‘name’ => ‘required|string|max:255’,
’email’ => ‘required|string|max:255|unique:users’,
‘phone’ => ‘required|unique:users,phone’,
‘password’ => ‘required|string|min:8’,
‘level_id’ => ‘required’,
]);
if ($validator->fails()) {
return response()->json($validator->errors());
}
$photo = $request->file(‘photo’);
if ($photo) {
$fileName = time().’_’.$photo->getClientOriginalName();
$filePath = $photo->storeAs(‘images/users’, $fileName, ‘public’);
}
$phone_number = $request[‘phone_number’];
if ($request[‘phone_number’][0] == “0”) {
$phone_number = substr($phone_number, 1);
}
if ($phone_number[0] == “8”) {
$phone_number = “62” . $phone_number;
}
$user = new user;
$user->photo = $filePath ?? null;
$user->name = $request->name;
$user->email = $request->email;
$user->phone_number = $phone_number;
$user->password = Hash::make($request->password);
$user->save();
$token = $user->createToken(‘auth_token’)->plainTextToken;
return response()->json([
‘data’ => $user,
‘access_token’ => $token,
‘token_type’ => ‘Bearer’
]);
}
public function login(Request $request)
{
if (! Auth::attempt($request->only(’email’, ‘password’))) {
return response()->json([
‘message’ => ‘Unauthorized’
], 401);
}
$user = User::where(’email’, $request->email)->firstOrFail();
$token = $user->createToken(‘auth_token’)->plainTextToken;
return response()->json([
‘message’ => ‘Login success’,
‘access_token’ => $token,
‘token_type’ => ‘Bearer’
]);
}
public function logout()
{
Auth::user()->tokens()->delete();
return response()->json([
‘message’ => ‘logout success’
]);
}
}

5.         Membuat Route

Langkah berikutnya yaitu membuat routes yang terletak pada file routes/api.php. Buka file routes/api.php dan tambahkan raoute untuk register, login dan logout seperti dibawah ini.

<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\AuthController;
Route::post(‘register’, [AuthController::class, ‘register’]);
Route::post(‘login’, [AuthController::class, ‘login’]);

Route::middleware(‘auth:sanctum’)->group(function () {
Route::post(‘/logout’, [AuthController::class, ‘logout’]);
});

6.         Uji Coba

Untuk melakukan uji coba, pertama lakukan run pada project dengan mengetikan perintah berikut pada git bash atau terminal di visual studio code.

php artisan serve

selanjutnya buka aplikasi postman, yang sebelumnya sudah di siapkan.

Uji Coba Register , Login dan logout

Untuk menguji fitur register, kita tambahkan POST request di dalam postman. Kita atur terlebih dahulu, method request, url dan data yang akan kita kirim.

Pada menu HTTP request method kita pilih POST, Pada input url kita arahkan urlnya ke http://127.0.0.1:8000/api/register, http://127.0.0.1:8000/api/login, http://127.0.0.1:8000/api/logout.

Pada tab Body, kita pilih radio button form-data, lalu kita coba masukan sample data photo, name, email, phone_number dan password, setelah itu kita klik tombol Send untuk mengirim POST request.

2 COMMENTS

Comments are closed.