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>
|
* @var array<int, string>
|
||||||
*/
|
*/
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'name',
|
'nama_lengkap',
|
||||||
|
'alamat',
|
||||||
|
'tgl_lahir',
|
||||||
|
'nama_wali',
|
||||||
|
'no_telp_wali',
|
||||||
|
'peran',
|
||||||
'email',
|
'email',
|
||||||
'password',
|
'password',
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use App\Http\Controllers\API\UserControler;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Route;
|
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