feat(auth): Add API endpoints user login, registration, and logout

This commit is contained in:
vionar3 2025-02-11 15:16:44 +07:00
parent af83a6a226
commit a601c2ffec
3 changed files with 111 additions and 3 deletions

View File

@ -0,0 +1,97 @@
<?php
namespace App\Http\Controllers\API;
use App\Helpers\ResponseFormatter;
use App\Http\Controllers\Controller;
use App\Models\User;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
class UserControler extends Controller
{
public function register(Request $request)
{
try {
$request->validate([
'nama_lengkap' => ['required', 'string', 'max:255'],
'alamat' => ['required', 'string', 'max:255'],
'tgl_lahir' => ['required', 'date'],
'nama_wali' => ['nullable', 'string', 'max:255'],
'no_telp_wali' => ['nullable', 'string', 'max:255'],
'peran' => ['required', 'in:santri,pengajar'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8'],
]);
$user = User::create([
'nama_lengkap' => $request->nama_lengkap,
'alamat' => $request->alamat,
'tgl_lahir' => $request->tgl_lahir,
'nama_wali' => $request->nama_wali,
'no_telp_wali' => $request->no_telp_wali,
'peran' => $request->peran,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
$tokenResult = $user->createToken('authToken')->plainTextToken;
return ResponseFormatter::success([
'access_token' => $tokenResult,
'token_type' => 'Bearer',
'user' => $user,
], 'User Registered');
} catch (Exception $error) {
return ResponseFormatter::error([
'message' => 'Something went wrong',
'error' => $error->getMessage(),
], 'Authentication Failed', 500);
}
}
public function login(Request $request)
{
try {
$request->validate([
'no_telp_wali' => 'required|string',
'password' => 'required'
]);
$user = User::where('no_telp_wali', $request->no_telp_wali)->first();
if (!$user || !Hash::check($request->password, $user->password)) {
return ResponseFormatter::error([
'message' => 'Nomor telepon atau password salah'
], 'Authentication Failed', 401);
}
$tokenResult = $user->createToken('authToken')->plainTextToken;
return ResponseFormatter::success([
'access_token' => $tokenResult,
'token_type' => 'Bearer',
// 'user' => $user
], 'Authenticated');
} catch (Exception $error) {
return ResponseFormatter::error([
'message' => 'Something went wrong',
'error' => $error->getMessage()
], 'Authentication Failed', 500);
}
}
public function fetch(Request $request)
{
return ResponseFormatter::success($request->user(), 'Data berhasil di ambil');
}
public function logout(Request $request)
{
$token = $request->user()->currentAccessToken()->delete();
return ResponseFormatter::success($token, 'Token Revoked');
}
}

View File

@ -18,7 +18,12 @@ class User extends Authenticatable
* @var array<int, string>
*/
protected $fillable = [
'name',
'nama_lengkap',
'alamat',
'tgl_lahir',
'nama_wali',
'no_telp_wali',
'peran',
'email',
'password',
];

View File

@ -1,5 +1,6 @@
<?php
use App\Http\Controllers\API\UserControler;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
@ -14,6 +15,11 @@
|
*/
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
Route::post('register', [UserControler::class, 'register']);
Route::post('login', [UserControler::class, 'login']);
Route::middleware('auth:sanctum')->group(function () {
Route::get('user', [UserControler::class, 'fetch']);
Route::post('logout', [UserControler::class, 'logout']);
});