From 74e5d0eed89ab3357ec176da0e244cbe1793e086 Mon Sep 17 00:00:00 2001 From: faiqahzaman <91926774+faiqahzaman@users.noreply.github.com> Date: Tue, 11 Jan 2022 17:18:48 +0800 Subject: [PATCH] register, login and logout function --- app/Http/Controllers/AuthController.php | 92 +++++++++++++++++++++++++ app/Http/Kernel.php | 4 +- app/Models/User.php | 1 + composer.json | 2 +- composer.lock | 12 ++-- routes/api.php | 64 +++++++++-------- 6 files changed, 137 insertions(+), 38 deletions(-) create mode 100644 app/Http/Controllers/AuthController.php diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php new file mode 100644 index 00000000..1cbc83de --- /dev/null +++ b/app/Http/Controllers/AuthController.php @@ -0,0 +1,92 @@ +validate([ + 'name' => 'required|string', + 'username' => 'required|string', + 'kodcaw' => 'required|string', + 'bank_acc_pembeli' => 'required|string', + 'bank_acc_no_pembeli' => 'required|string', + 'alamat_rumah' => 'required|string', + 'notelpejabat' => 'required|string', + 'notelbimbit' => 'required|string', + 'note' => 'string', + 'status' => 'required|string', + 't_daftar' => 'required|date', + 'online' => 'integer', + 'register_agree' => 'required|integer', + 'email' => 'required|string|unique:users,email', + 'password' => 'required|string|confirmed' + ]); + + $user = User::create([ + 'name' => $fields['name'], + 'username' => $fields['username'], + 'kodcaw' => $fields['kodcaw'], + 'bank_acc_pembeli' => $fields['bank_acc_pembeli'], + 'bank_acc_no_pembeli' => $fields['bank_acc_no_pembeli'], + 'alamat_rumah' => $fields['alamat_rumah'], + 'notelpejabat' => $fields['notelpejabat'], + 'notelbimbit' => $fields['notelbimbit'], + 'status' => $fields['status'], + 't_daftar' => $fields['t_daftar'], + 'online' => $fields['online'], + 'register_agree' => $fields['register_agree'], + 'email' => $fields['email'], + 'email' => $fields['email'], + 'password' => bcrypt($fields['password']) + ]); + + $token = $user->createToken('myapptoken')->plainTextToken; + $response = [ + 'user' => $user, + 'token' => $token + ]; + + return response($response, 201); + } + + public function login(Request $request) { + $fields = $request->validate([ + 'username' => 'required|string', + 'password' => 'required|string' + ]); + + //Check Email + $user = User::where('username', $fields['username'])->first(); + + //Check Password + if(!$user || !Hash::check($fields['password'], $user->password)){ + return response([ + 'message' => 'Bad Creds' + ], 401); + + } + + $token = $user->createToken('myapptoken')->plainTextToken; + $response = [ + 'user' => $user, + 'token' => $token + ]; + + return response($response, 201); + } + + public function logout(Request $request){ + auth()->user()->tokens()->delete(); + + return [ + 'message' => 'Logged Out' + ]; + + } +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 65f00f35..15eba476 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -38,9 +38,9 @@ class Kernel extends HttpKernel \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], - + 'api' => [ - // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, + \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], diff --git a/app/Models/User.php b/app/Models/User.php index feb41de4..2e6b3054 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -20,6 +20,7 @@ class User extends Authenticatable */ protected $fillable = [ 'name', + 'username', 'email', 'password', 'kodcaw', diff --git a/composer.json b/composer.json index b5f9acf9..d2e3cd46 100644 --- a/composer.json +++ b/composer.json @@ -10,7 +10,7 @@ "fruitcake/laravel-cors": "^2.0", "guzzlehttp/guzzle": "^7.0.1", "laravel/framework": "^8.65", - "laravel/sanctum": "^2.11", + "laravel/sanctum": "^2.13", "laravel/tinker": "^2.5", "spatie/laravel-permission": "^5.3" }, diff --git a/composer.lock b/composer.lock index 99fc5f0f..9701c310 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "a0c6a386f78f6d432be79a4da6d101e1", + "content-hash": "5a99e809aac124ccfab83552fde32309", "packages": [ { "name": "asm89/stack-cors", @@ -1265,16 +1265,16 @@ }, { "name": "laravel/sanctum", - "version": "v2.12.1", + "version": "v2.13.0", "source": { "type": "git", "url": "https://github.com/laravel/sanctum.git", - "reference": "e610647b04583ace6b30c8eb74cee0a866040420" + "reference": "b4c07d0014b78430a3c827064217f811f0708eaa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sanctum/zipball/e610647b04583ace6b30c8eb74cee0a866040420", - "reference": "e610647b04583ace6b30c8eb74cee0a866040420", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/b4c07d0014b78430a3c827064217f811f0708eaa", + "reference": "b4c07d0014b78430a3c827064217f811f0708eaa", "shasum": "" }, "require": { @@ -1325,7 +1325,7 @@ "issues": "https://github.com/laravel/sanctum/issues", "source": "https://github.com/laravel/sanctum" }, - "time": "2021-10-26T18:23:26+00:00" + "time": "2021-12-14T17:49:47+00:00" }, { "name": "laravel/serializable-closure", diff --git a/routes/api.php b/routes/api.php index f93b0396..23929f19 100644 --- a/routes/api.php +++ b/routes/api.php @@ -2,6 +2,7 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; +use App\Http\Controllers\AuthController; /* |-------------------------------------------------------------------------- @@ -14,41 +15,46 @@ use Illuminate\Support\Facades\Route; | */ -Route::middleware('auth:sanctum')->get('/user', function (Request $request) { - // dd(); - return response()->json($request->user()); +//Public routes +Route::post('/register', [AuthController::class, 'register']); +Route::post('/login', [AuthController::class, 'login']); + +//Protected routes +Route::group(['middleware' => ['auth:sanctum']], function () { + + Route::post('/logout', [AuthController::class, 'logout']); }); -Route::post('/login', function (Request $request) { - $request->validate([ - 'username' => 'required|string', - 'password' => 'required|string', - ]); +// Route::post('/login', function (Request $request) { +// $request->validate([ +// 'username' => 'required|string', +// 'password' => 'required|string', +// ]); - $credentials = $request->only('username', 'password'); +// $credentials = $request->only('username', 'password'); - if (Auth::guard('api')->attempt($credentials,true)) { - $auth_user = Auth::guard('api')->user(); +// if (Auth::guard('api')->attempt($credentials,true)) { +// $auth_user = Auth::guard('api')->user(); - // dd($auth_user); - $user_login['name'] = $auth_user['name']; - $user_login['username'] = $auth_user['username']; - $user_login['password'] = $auth_user['password']; - $user_login['icno'] = $auth_user['nokp']; - $user_login['apitoken'] = $auth_user['remember_token']; - return response()->json([ - 'success' => true, - 'user' => $user_login - ]); - } else { - //if authentication is unsuccessfull, notice how I return json parameters - return response()->json([ - 'success' => false, - 'message' => 'Invalid Email or Password', - ], 401); - } -}); +// // dd($auth_user); +// $user_login['name'] = $auth_user['name']; +// $user_login['username'] = $auth_user['username']; +// $user_login['password'] = $auth_user['password']; +// $user_login['icno'] = $auth_user['nokp']; +// $user_login['apitoken'] = $auth_user['remember_token']; +// return response()->json([ +// 'success' => true, +// 'user' => $user_login +// ]); +// } else { +// //if authentication is unsuccessfull, notice how I return json parameters +// return response()->json([ +// 'success' => false, +// 'message' => 'Invalid Email or Password', +// ], 401); +// } +// }); Route::get('/item','ApiController@biditem');