feat(auth): Add API endpoints user login, registration, and logout
This commit is contained in:
parent
af83a6a226
commit
a601c2ffec
|
@ -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');
|
||||
}
|
||||
}
|
|
@ -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',
|
||||
];
|
||||
|
|
|
@ -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']);
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue