Tutorial Laravel 13 REST API Authentication #3 – Membuat API Register & Validasi Input

Panduan lengkap membuat REST API authentication di Laravel 13. Dalam tutorial ini, teman-teman akan belajar membuat fitur register, login, logout, dan mendapatkan informasi user yang sedang login menggunakan API, lengkap dengan validasi dan penanganan error. Cocok untuk pemula yang ingin memahami autentikasi berbasis API di Laravel.

✅ Telah dilihat 264 kali

Rating: 5.00 ⭐

... 18 March 2026, 10:41

Create Auth Controller

Pada materi kali ini, kita akan membuat sebuah API controller yang bertujuan untuk menangani proses registerlogin, dan logout.

Silakan masukkan command line berikut ini di dalam proyek Laravel Kita:

php artisan make:controller Api\AuthController

Perintah di atas akan menghasilkan file controller baru dengan nama AuthController yang tersimpan di dalam folder app/Http/Controllers/Api/AuthController.php.

img

Function Register

Mari kita buat function untuk menangani proses register pengguna. Silakan edit file controller yang baru saja dibuat sehingga akan terlihat seperti berikut:

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\User;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\Rules\Password;

class AuthController extends Controller
{
    public function register(Request $request)
    {
        // Validasi input
        $validator = Validator::make($request->all(), [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users,email',
            'password' => ['required', 'confirmed', Password::defaults()],
        ]);

        if ($validator->fails()) {
            return response()->json([
                'success' => false,
                'errors' => $validator->errors(),
                'message' => 'Registration failed. Please check your input.',
            ], 422);
        }

        // Buat user baru
        $user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => Hash::make($request->password),
        ]);

        // Login user dan buat token
        Auth::login($user);
        $responseData = [
            'token' => $user->createToken($user->name)->plainTextToken,
            'name' => $user->name,
        ];

        // Kirim respons sukses
        return response()->json([
            'success' => true,
            'data' => $responseData,
            'message' => 'User successfully registered.',
        ]);
    }
}

1. Deklarasi Fungsi

public function register(Request $request)
  • Fungsi register ini adalah method publik di sebuah controller Laravel.
  • Menerima satu parameter, yaitu $request yang merupakan instance dari Illuminate\Http\Request.
  • $request berisi semua data yang dikirimkan oleh client (misalnya dari form registrasi).

2. Validasi Input

$validator = Validator::make($request->all(), [
    'name' => 'required|string|max:255',
    'email' => 'required|string|email|max:255|unique:users,email',
    'password' => ['required', 'confirmed', Password::defaults()],
]);
  • Membuat objek validator untuk memeriksa data input user.
  • $request->all() → mengambil semua input dari request.
  • Aturan validasi:
    • name: wajib diisi (required), tipe string (string), maksimal 255 karakter.
    • email: wajib, string, format email, max 255 karakter, harus unik di kolom email tabel users.
    • password: wajib, harus dikonfirmasi (confirmed → memerlukan input password_confirmation), sesuai aturan default Laravel (Password::defaults()).

3. Cek Hasil Validasi

if ($validator->fails()) {
    return response()->json([
        'success' => false,
        'errors' => $validator->errors(),
        'message' => 'Registration failed. Please check your input.',
    ], 422);
}
  • Jika validasi gagal:
    • fails() mengembalikan true.
    • Mengirimkan JSON response:
      • success: false → menandakan gagal.
      • errors: daftar error per field.
      • message: pesan umum untuk client.
    • Status HTTP 422 Unprocessable Entity → artinya data yang dikirim tidak valid.

4. Membuat User Baru

$user = User::create([
    'name' => $request->name,
    'email' => $request->email,
    'password' => Hash::make($request->password),
]);
  • User::create(...) → menyimpan data baru ke tabel users.
  • Hash::make(...) → mengenkripsi password sebelum disimpan, agar tidak disimpan dalam bentuk plain text (praktik keamanan wajib).
  • $user sekarang adalah instance user yang baru saja dibuat.

5. Login dan Buat Token

Auth::login($user);
$responseData = [
    'token' => $user->createToken($user->name)->plainTextToken,
    'name' => $user->name,
];
  • Auth::login($user) → otomatis login user baru.
  • createToken($user->name) → membuat API token (menggunakan Laravel Sanctum).
  • plainTextToken → token yang dikirim ke client untuk autentikasi selanjutnya.
  • responseData berisi data yang akan dikirim balik ke client: token + name.

6. Kirim Respons Sukses

return response()->json([
    'success' => true,
    'data' => $responseData,
    'message' => 'User successfully registered.',
]);
  • Mengirimkan JSON response ke client:
    • success: true → menandakan registrasi berhasil.
    • data: token dan nama user.
    • message: pesan sukses.

Ringkasan Alur

  1. Terima request registrasi.
  2. Validasi input.
  3. Jika gagal → kirim error 422.
  4. Jika valid → buat user baru, hash password.
  5. Login user dan buat token API.
  6. Kirim JSON response sukses.

Model User

Silakan buka file User.php di dalam folder app/Models, kemudian tambahkan baris berikut ini:

use Laravel\Sanctum\HasApiTokens;
HasApiTokens

Dan tambahkan trait HasApiTokens ke dalam kelas User. Sehingga secara keseluruhan akan terlihat seperti berikut:

<?php

namespace App\Models;

// use Illuminate\Contracts\Auth\MustVerifyEmail;
use Database\Factories\UserFactory;
use Illuminate\Database\Eloquent\Attributes\Fillable;
use Illuminate\Database\Eloquent\Attributes\Hidden;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravel\Sanctum\HasApiTokens;
use Illuminate\Notifications\Notifiable;

#[Fillable(['name', 'email', 'password'])]
#[Hidden(['password', 'remember_token'])]
class User extends Authenticatable
{
    /** @use HasFactory<UserFactory> */
    use HasApiTokens, HasFactory, Notifiable;

    /**
     * Get the attributes that should be cast.
     *
     * @return array<string, string>
     */
    protected function casts(): array
    {
        return [
            'email_verified_at' => 'datetime',
            'password' => 'hashed',
        ];
    }
}

Set Register Route

Silakan buka file api.php yang terletak di dalam folder routes. Tambahkan rute register berikut ini:

use App\Http\Controllers\Api\AuthController;

Route::post('register', [AuthController::class, 'register']);

Sehingga, secara keseluruhan, file api.php akan terlihat seperti berikut:

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\AuthController;

Route::middleware('auth:sanctum')->group(function () {
    Route::get('/user', [AuthController::class, 'getUser']);
});


Route::post('register', [AuthController::class, 'register']);

Cek Rute

Untuk memastikan bahwa rute register sudah terdaftar di dalam proyek kita, silakan masukkan dan jalankan command line berikut ini di CMD:

php artisan route:list

Terlihat bahwa rute register sudah terdaftar. Pada materi berikutnya, kita akan melakukan uji coba untuk membuat pengguna menggunakan API register yang baru saja kita buat.

Daftar eBook