Laravel 12 CRUD (MySQL + JWT) #10: Membuat Endpoint Registrasi dan Login
byFerdian Rahabista-
0
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).
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:
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.