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.”