Laravel 12 CRUD (MySQL + JWT) #10: Membuat Endpoint Registrasi dan Login

Laravel 12 CRUD (MySQL + JWT)
#10 Membuat Endpoint Registrasi dan Login

📝 Buat AuthController • Registrasi user • Login dengan JWT token
🎫 Sekarang kita buat endpoint untuk registrasi dan login!
Setelah JWT terpasang dan tabel users siap, kita perlu membuat endpoint yang bisa digunakan pengguna untuk mendaftar dan login. Saat login berhasil, API akan mengembalikan token JWT yang nanti akan digunakan untuk mengakses endpoint CRUD siswa yang dilindungi. Yuk kita buat! 🚀

Langkah 1: Buat AuthController

1 Buka terminal di folder proyek siswaapi. Jalankan perintah:

php artisan make:controller AuthController

Perintah ini akan membuat file controller baru di app/Http/Controllers/AuthController.php.

Langkah 2: Isi AuthController dengan Logika Registrasi dan Login

2 Buka app/Http/Controllers/AuthController.php dan isi dengan kode berikut:

<?php namespace App\Http\Controllers; use App\Models\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Hash; use Illuminate\Validation\ValidationException; class AuthController extends Controller { /** * Register a new user */ public function register(Request $request) { $request->validate([ 'name' => 'required|string|max:255', 'email' => 'required|string|email|max:255|unique:users', 'password' => 'required|string|min:6|confirmed', ]); $user = User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password), ]); $token = auth('api')->login($user); return response()->json([ 'success' => true, 'message' => 'User registered successfully', 'user' => $user, 'token' => $token, 'token_type' => 'bearer', 'expires_in' => auth('api')->factory()->getTTL() * 60 ], 201); } /** * Login user and return JWT token */ public function login(Request $request) { $request->validate([ 'email' => 'required|email', 'password' => 'required|string', ]); $credentials = $request->only('email', 'password'); if (!$token = auth('api')->attempt($credentials)) { return response()->json([ 'success' => false, 'message' => 'Invalid email or password' ], 401); } return response()->json([ 'success' => true, 'message' => 'Login successful', 'token' => $token, 'token_type' => 'bearer', 'expires_in' => auth('api')->factory()->getTTL() * 60, 'user' => auth('api')->user() ]); } /** * Logout user (invalidate token) */ public function logout() { auth('api')->logout(); return response()->json([ 'success' => true, 'message' => 'Successfully logged out' ]); } /** * Get authenticated user profile */ public function me() { return response()->json([ 'success' => true, 'user' => auth('api')->user() ]); } /** * Refresh a token */ public function refresh() { return response()->json([ 'success' => true, 'token' => auth('api')->refresh(), 'token_type' => 'bearer', 'expires_in' => auth('api')->factory()->getTTL() * 60 ]); } }

Penjelasan method:

  • register() → validasi input, buat user baru, hash password, login user dan kembalikan token.
  • login() → validasi email/password, jika cocok, buat token JWT dan kembalikan.
  • logout() → invalidate token (logout).
  • me() → ambil data user yang sedang login.
  • refresh() → refresh token (perpanjang masa berlaku).

Langkah 3: Daftarkan Rute untuk Autentikasi

3 Buka file routes/api.php. Tambahkan rute-rute berikut:

use App\Http\Controllers\AuthController; // Rute publik (tanpa autentikasi) Route::post('register', [AuthController::class, 'register']); Route::post('login', [AuthController::class, 'login']); // Rute yang membutuhkan autentikasi Route::middleware('auth:api')->group(function () { Route::post('logout', [AuthController::class, 'logout']); Route::get('me', [AuthController::class, 'me']); Route::post('refresh', [AuthController::class, 'refresh']); });
📌 Catatan: Rute logout, me, dan refresh dilindungi oleh middleware auth:api, artinya hanya bisa diakses dengan token JWT yang valid.

Langkah 4: Cek Daftar Rute

4 Untuk memastikan rute sudah terdaftar, jalankan:

php artisan route:list

Cari baris yang mengandung api/register, api/login, dll.

Langkah 5: Uji Registrasi dengan Postman

5 Pastikan server Laravel berjalan (php artisan serve). Buka Postman.

  • Buat request POST ke http://localhost:8000/api/register
  • Pilih tab Body → raw → JSON, masukkan data:
{ "name": "Budi Santoso", "email": "budi@example.com", "password": "password", "password_confirmation": "password" }

Klik Send. Respons sukses (status 201):

{ "success": true, "message": "User registered successfully", "user": { "name": "Budi Santoso", "email": "budi@example.com", "updated_at": "2025-03-24T10:00:00.000000Z", "created_at": "2025-03-24T10:00:00.000000Z", "id": 3 }, "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...", "token_type": "bearer", "expires_in": 3600 }

Langkah 6: Uji Login dengan Postman

6 Buat request POST ke http://localhost:8000/api/login dengan body JSON:

{ "email": "budi@example.com", "password": "password" }

Respons sukses (status 200):

{ "success": true, "message": "Login successful", "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...", "token_type": "bearer", "expires_in": 3600, "user": { "id": 3, "name": "Budi Santoso", "email": "budi@example.com", ... } }

Salin token yang diterima, akan digunakan untuk mengakses endpoint yang dilindungi.

Langkah 7: Uji Endpoint yang Dilindungi (me)

7 Buat request GET ke http://localhost:8000/api/me. Pada tab Authorization, pilih type Bearer Token, masukkan token yang didapat dari login. Klik Send. Respons:

{ "success": true, "user": { "id": 3, "name": "Budi Santoso", "email": "budi@example.com", ... } }

Jika tidak menyertakan token, akan mendapat error 401 Unauthorized.

🎉 Endpoint registrasi dan login siap! Sekarang pengguna bisa mendaftar, login, dan mendapatkan token JWT. Selanjutnya kita akan melindungi endpoint CRUD siswa dengan middleware auth:api.

Ringkasan Langkah

  • ✅ Buat AuthController: php artisan make:controller AuthController
  • ✅ Isi controller dengan method register, login, logout, me, refresh.
  • ✅ Daftarkan rute di routes/api.php (publik dan protected).
  • ✅ Uji registrasi dengan Postman.
  • ✅ Uji login, dapatkan token JWT.
  • ✅ Uji endpoint /me dengan bearer token.

📌 Ingat: Simpan token dengan aman. Token ini digunakan sebagai kunci akses ke API.

(Link akan aktif saat artikel sebelumnya dan selanjutnya terbit)

📘 Laravel 12 CRUD (MySQL + JWT) • #10 Membuat Endpoint Registrasi dan Login • 🔑 Autentikasi siap!
Lebih baru Lebih lama

نموذج الاتصال