This post is also available in:
English
Hallo apa kabar semuanya, semoga teman teman semua sehat dan sukses selalu. Kali ini kita akan membahas cara membuat REST API Login dan Register menggunakan Sanctum di Laravel.
Kalian juga dapat meliat tutorial ini dengan video:
Laravel sangtum merupakan layanan penyedia featherweight authentication system untuk Single Page Application (SPA), mobile application dan API berbasis token yang sederhana. Santum dapat membuat beberapa token API, Token ini dapat diberikan kemampuan untuk menentukan tindakan yang diizinkan untuk dilakukan oleh token.
Sebelum saya lanjutkan, mungkin kalian semua tertarik dengan artikel yang lainnya:
Upload File menggunakan Ajax di Laravel
Menggunakan File System Node.JS
Tutorial Laravel : Push Notification Dengan Firebase Laravel 9
Baiklah kita langsung saja ke tutorialnya.
Langkah 1: Install Laravel
Disini kita akan lakukan install laravel versi terbaru, yang akan kita coba untuk membuat REST API authentication menggunakan sanctum.
//via Laravel Installer
composer global require laravel/installer
laravel new laravel-sanctum
//via Composer
composer create-project laravel/laravel laravel-sanctum
Langkah 2: Setup Database
Selanjutnya kalian buat database dan lakukan konfigurasi di file .env.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_sanctum
DB_USERNAME=root
DB_PASSWORD=
Langkah 3: Install Sanctum
composer require laravel/sanctum
Kita dapat menginstall sanctum melalui composer package manager dengan perintah seperti di atas.
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
Selanjutnya, kita harus publish sanctum configuration dan file migration menggunakan perintah artisan vendor:publish atau seperti perintah di atas. File sanctum configuration akan ditempatkan di direktori config.
php artisan migrate
Langkah 4: Buat AuthController
php artisan make:controller API/AuthController
Buat file controller baru dengan nama AuthController di dalam folder app/Http/Controllers/API menggunakan perintah seperti di atas. File controller ini nantinya akan kita gunakan untuk membuat logic authentication di laravel 8 menggunakan sanctum.
<?php
namespace App\Http\Controllers\API;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Auth;
use Validator;
use App\Models\User;
class AuthController extends Controller
{
public function register(Request $request)
{
$validator = Validator::make($request->all(),[
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:8'
]);
if($validator->fails()){
return response()->json($validator->errors());
}
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password)
]);
$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' => 'Hi '.$user->name.', welcome to home','access_token' => $token, 'token_type' => 'Bearer', ]);
}
// method for user logout and delete token
public function logout()
{
auth()->user()->tokens()->delete();
return [
'message' => 'You have successfully logged out and the token was successfully deleted'
];
}
}
Setelah file AuthController.php berhasil digenerate, sekarang silahkan buka file tersebut dan ubah semua kodenya menjadi seperti di atas. Di file AuthController.php ini, kita membuat method register, login dan logout.
Penjelasan method-method tersebut:
- Register. Di method ini, kita menambahkan validasi untuk name, email dan password. Jika data POST request gagal divalidasi, maka akan mengirimkan response error dari validasi tersebut. Tapi, jika POST request berhasil divalidasi, maka data dari POST request akan disimpan di table users dan akan membuat token baru, serta akan mengirimkan response json yang berisikan detail dari data yang telah ditambahkan beserta token yang telah berhasil dibuat.
- Login. Di method ini, kita tambahkan logic untuk memeriksa apakah email dan password yang diinput benar-benar cocok dengan salah satu data di table users. Jika data gagal ditemukan di tables users, maka response yang dihasilkan akan berstatus 401 atau Unauthorized. Tapi jika data tersebut berhasil ditemukan, maka akan membuatkan token baru untuk user tersebut yang akan disimpan di table personal_access_tokens.
- Logout. Method ini akan menghapus user session dengan menghapus semua token milik user tersebut di table personal_access_token.
Langkah 5: Define Route
//API route for register new user
Route::post('/register', [App\Http\Controllers\API\AuthController::class, 'register']);
//API route for login user
Route::post('/login', [App\Http\Controllers\API\AuthController::class, 'login']);
//Protecting Routes
Route::group(['middleware' => ['auth:sanctum']], function () {
Route::get('/profile', function(Request $request) {
return auth()->user();
});
// API route for logout user
Route::post('/logout', [App\Http\Controllers\API\AuthController::class, 'logout']);
});
Buka file routes/api.php dan tambahkan kode route seperti di atas. Disini kita menambahkan route baru yaitu register, login, profile dan logout. Untuk route profile dan logout, kita menggunakan sanctum authenticated guard (‘middleware’ => [‘auth:sanctum’]). Artinya, kedua route tersebut hanya dapat diakses oleh pengguna yang telah diautentikasi atau mengakses menggunakan token.
Langkah 6: Testing API
php artisan serve
Dan selanjutnya kita akan tester hasil dari REST API yang telah kita buat.
Register

Login

Get Profile

Demikian tutorial kali ini saya buat, semoga bermanfaat.
Terimakasih.