From 7bf23b0aa8dcac6d379498e986b1ea4d405d074d Mon Sep 17 00:00:00 2001 From: ricky rx Date: Tue, 16 Apr 2024 13:46:32 +0700 Subject: [PATCH] feat: api login --- .env.example | 3 ++ app/Helper/JSONResponse.php | 25 ++++++++++++++ app/Http/Controllers/api/LoginController.php | 36 ++++++++++++++++++++ routes/api.php | 5 +-- 4 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 app/Helper/JSONResponse.php create mode 100644 app/Http/Controllers/api/LoginController.php diff --git a/.env.example b/.env.example index e7490f8..d3cf695 100644 --- a/.env.example +++ b/.env.example @@ -4,6 +4,9 @@ APP_KEY= APP_DEBUG=true APP_URL=http://localhost +# for CORS +SANCTUM_STATEFUL_DOMAINS=[http://localhost:3000] + LOG_CHANNEL=stack LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=debug diff --git a/app/Helper/JSONResponse.php b/app/Helper/JSONResponse.php new file mode 100644 index 0000000..7667799 --- /dev/null +++ b/app/Helper/JSONResponse.php @@ -0,0 +1,25 @@ +json($arr); + } + static function Error($msg,$arr=[]) { + $arr["result"]="error"; + $arr['message']=$msg; + return response()->json($arr); + } + static function Debug($data) { + return response()->json(["result"=>"debug", "data"=>$data]); + } + static function Unauthorized($arr=[]) { + $arr["result"]="unauthorized"; + return response()->json($arr); + } + static function Forbidden($arr=[]) { + $arr["result"]="forbidden"; + return response()->json($arr); + } +} diff --git a/app/Http/Controllers/api/LoginController.php b/app/Http/Controllers/api/LoginController.php new file mode 100644 index 0000000..cfcc1de --- /dev/null +++ b/app/Http/Controllers/api/LoginController.php @@ -0,0 +1,36 @@ +validate( + ['username' => 'required|string'], + ['password' => 'required|string' ] + ); + + $user = User::where('username', 'ilike', $request->username) + ->orWhere('password', 'ilike', $request->username) + ->first(); + if(!$user || Hash::check($user->password, $user->password)) { + throw new \Exception('username / password are incorrect'); + } + + if(!$user->is_active) { + throw new \Exception('User is inactive'); + } + + $token = $user->createToken('auth_token')->plainTextToken; + return JSONResponse::Success(['session' => [ + 'username' => $user->username, + 'email' => $user->email, + 'token' => $token] + ]); + } +} diff --git a/routes/api.php b/routes/api.php index 889937e..858890b 100644 --- a/routes/api.php +++ b/routes/api.php @@ -1,5 +1,6 @@ get('/user', function (Request $request) { - return $request->user(); +Route::controller(LoginController::class)->group(function() { + Route::post('/login', 'login'); });