Tutorial Laravel 12 – Membuat Web Berita berbasis API – Bagian #4 (Setting Auth Laravel Sanctum 12)

BAGIAN 1 — AUTH DI LARAVEL 12 (API)

1️⃣ Install Laravel Sanctum

Di folder Laravel (api-berita):

composer require laravel/sanctum

2️⃣ Publish Config Sanctum

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
php artisan migrate

3️⃣ Konfigurasi Middleware (Laravel 12)

Buka:

bootstrap/app.php

Pastikan ada Sanctum:

use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful;

->withMiddleware(function ($middleware) {
    $middleware->alias([
        'auth:sanctum' => \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
    ]);
});

Kalau belum ada alias auth:sanctum, tambahkan seperti di atas.


BAGIAN 2 — CONTROLLER AUTH (API)

4️⃣ Buat Controller Auth

php artisan make:controller Api/AuthController

5️⃣ Isi AuthController.php

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;

class AuthController extends Controller
{
    // REGISTER
    public function register(Request $request)
    {
        $request->validate([
            'name' => 'required',
            'email' => 'required|email|unique:users',
            'password' => 'required|min:6'
        ]);

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

        $token = $user->createToken('auth_token')->plainTextToken;

        return response()->json([
            'user' => $user,
            'token' => $token
        ]);
    }

    // LOGIN
    public function login(Request $request)
    {
        $user = User::where('email', $request->email)->first();

        if (!$user || !Hash::check($request->password, $user->password)) {
            return response()->json([
                'message' => 'Login gagal'
            ], 401);
        }

        $token = $user->createToken('auth_token')->plainTextToken;

        return response()->json([
            'user' => $user,
            'token' => $token
        ]);
    }

    // LOGOUT
    public function logout(Request $request)
    {
        $request->user()->currentAccessToken()->delete();

        return response()->json([
            'message' => 'Logout berhasil'
        ]);
    }
}

BAGIAN 3 — ROUTE AUTH (API)

6️⃣ Tambahkan Route (Laravel 12)

Di:

routes/web.php
use App\Http\Controllers\Api\AuthController;

Route::prefix('api')->group(function () {
    Route::post('/register', [AuthController::class, 'register']);
    Route::post('/login', [AuthController::class, 'login']);

    Route::middleware('auth:sanctum')->post('/logout', [AuthController::class, 'logout']);
});

BAGIAN 4 — TEST API (PASTI BERHASIL)

7️⃣ Test Register (POST) di Postman

POST : http://127.0.0.1:8000/api/register

Body (JSON):

{
  "name": "Admin",
  "email": "admin@mail.com",
  "password": "123456"
}

✅ Response:

{
  "user": {...},
  "token": "xxxxx"
}

Sekarang modifikasi Model User.php, Buka file:

app/Models/User.php

Pastikan isinya seperti ini (WAJIB ADA HasApiTokens)

<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;

    protected $fillable = [
        'name',
        'email',
        'password',
    ];

    protected $hidden = [
        'password',
        'remember_token',
    ];
}

📌 Baris kunci yang sering lupa:

use Laravel\Sanctum\HasApiTokens;

dan

use HasApiTokens;

🔄 SETELAH ITU (WAJIB)

1️⃣ Simpan file
2️⃣ Restart server Laravel:

php artisan serve

8️⃣ Test Login

POST : http://127.0.0.1:8000/api/login

Body:

{
  "email": "admin@mail.com",
  "password": "123456"
}
Response login:

{
  "user": {
    "id": 1,
    "name": "Admin",
    "email": "admin@mail.com"
  },
  "token": "1|kjsdfhksdfh..."
}

Method createToken() berasal dari trait HasApiTokens.
Jika trait ini tidak digunakan di model User, Laravel tidak mengenali fitur token Sanctum.”


Tags :

Leave a Reply

Your email address will not be published. Required fields are marked *

twenty − fifteen =

Tutorial Terpopuler

Tutorial Pilihan

Tentang Gurututorku

Gurututorku adalah sebuah kursus online maupun offline yang menyediakan berbagai macam tutorial tentang pemrograman, design, dan multimedia serta artikel teknologi yang tentunya bisa dinikmati dan dipelajari oleh semua orang yang baru ingin belajar dunia IT.

© 2024 – Gurututorku.com | Learning today success tomorrow.