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.
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.
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.
Sempat ga work di logout, ternyata belum saya kasih parameter request. Terimakasih bang
sama2 kak
Comments are closed.