From 2ec789ca7ff6dc8b0562abdcf0118560674bf083 Mon Sep 17 00:00:00 2001 From: "DESKTOP-6RVDTCF\\Simran" Date: Sat, 20 May 2023 19:00:17 +0530 Subject: [PATCH] feat(api): Integrated Api for login, signUp and change password --- .../API/Auth/AccessTokenController.php | 23 ++++++++ .../API/Auth/ChangePasswordController.php | 32 +++++++++++ .../API/Auth/RegistrationController.php | 55 +++++++++++++++++++ .../Requests/Api/ChangePasswordRequest.php | 33 +++++++++++ app/Http/Requests/Api/RegistrationRequest.php | 28 ++++++++++ app/Http/Resources/UserResource.php | 33 +++++++++++ app/Models/User.php | 2 +- app/MyClasses/ApiHelpers.php | 19 +++++++ routes/api.php | 6 +- 9 files changed, 228 insertions(+), 3 deletions(-) create mode 100644 app/Http/Controllers/API/Auth/AccessTokenController.php create mode 100644 app/Http/Controllers/API/Auth/ChangePasswordController.php create mode 100644 app/Http/Controllers/API/Auth/RegistrationController.php create mode 100644 app/Http/Requests/Api/ChangePasswordRequest.php create mode 100644 app/Http/Requests/Api/RegistrationRequest.php create mode 100644 app/Http/Resources/UserResource.php create mode 100644 app/MyClasses/ApiHelpers.php diff --git a/app/Http/Controllers/API/Auth/AccessTokenController.php b/app/Http/Controllers/API/Auth/AccessTokenController.php new file mode 100644 index 0000000..9d27c8f --- /dev/null +++ b/app/Http/Controllers/API/Auth/AccessTokenController.php @@ -0,0 +1,23 @@ +input('username'); + $user = User::where('email', $requestUsername)->orWhere('mobile', $requestUsername)->first(); + if(!$user) return abort(422, "The credentials are incorrect"); + + return parent::issueToken($request); + } +} diff --git a/app/Http/Controllers/API/Auth/ChangePasswordController.php b/app/Http/Controllers/API/Auth/ChangePasswordController.php new file mode 100644 index 0000000..bfe0a74 --- /dev/null +++ b/app/Http/Controllers/API/Auth/ChangePasswordController.php @@ -0,0 +1,32 @@ +input('current_password'), $user->password)) { + return ApiHelpers::response('Current Password is incorrect', [], 422); + } + $user->update(['password' => Hash::make($request->input('new_password'))]); + return ApiHelpers::response('Password has been updated successfully!'); + } +} diff --git a/app/Http/Controllers/API/Auth/RegistrationController.php b/app/Http/Controllers/API/Auth/RegistrationController.php new file mode 100644 index 0000000..f884405 --- /dev/null +++ b/app/Http/Controllers/API/Auth/RegistrationController.php @@ -0,0 +1,55 @@ +userRepository = $userRepo; + } + + /** + * Register api + * + * @param RegistrationRequest $request + * @return JsonResponse + * @throws \Throwable + */ + public function register(RegistrationRequest $request) { + DB::beginTransaction(); + + $user = User::create($request->validated()); + $user->assignRole('Super Admin'); + $this->userRepository->updateOrCreate_avatar($user, $request); + $objToken = $user->createToken($user->name); + $strToken = $objToken->accessToken; + $expiration = $objToken->token->expires_at->diffInSeconds(Carbon::now()); + + DB::commit(); + + event(new Registered($user)); + + return ApiHelpers::response('User Registered Registered Successfully try to login', [ + 'user' => new UserResource($user), + 'token' => [ + 'access_token' => $strToken, + 'expires_in' => $expiration, + 'token_type' => 'Bearer', + ] + ]); + } + + +} diff --git a/app/Http/Requests/Api/ChangePasswordRequest.php b/app/Http/Requests/Api/ChangePasswordRequest.php new file mode 100644 index 0000000..bc72b13 --- /dev/null +++ b/app/Http/Requests/Api/ChangePasswordRequest.php @@ -0,0 +1,33 @@ + + */ + public function rules() + { + return [ + 'current_password' => 'required', + 'new_password' => 'required', + 'confirm_password' => 'required|same:new_password' + ]; + + } +} diff --git a/app/Http/Requests/Api/RegistrationRequest.php b/app/Http/Requests/Api/RegistrationRequest.php new file mode 100644 index 0000000..b52b805 --- /dev/null +++ b/app/Http/Requests/Api/RegistrationRequest.php @@ -0,0 +1,28 @@ + + */ + public function rules() + { + $rules = User::$rules; + unset($rules['role']); + unset($rules['role.*']); + return $rules; + } + + protected function prepareForValidation() + { + $this->merge(UserRepository::requestHandler($this)); + } +} diff --git a/app/Http/Resources/UserResource.php b/app/Http/Resources/UserResource.php new file mode 100644 index 0000000..e5108bb --- /dev/null +++ b/app/Http/Resources/UserResource.php @@ -0,0 +1,33 @@ +only([ + 'name', + 'email', + 'mobile', + 'uuid', + ]), [ + 'roles' => $this->getRoleNames()->join(', '), + ]); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index dbef2a9..b240002 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -14,7 +14,7 @@ use Spatie\MediaLibrary\MediaCollections\File; use Spatie\MediaLibrary\MediaCollections\Models\Media; use Spatie\Permission\Traits\HasRoles; -use Laravel\Sanctum\HasApiTokens; +use Laravel\Passport\HasApiTokens; /** * App\Models\User diff --git a/app/MyClasses/ApiHelpers.php b/app/MyClasses/ApiHelpers.php new file mode 100644 index 0000000..b2aca12 --- /dev/null +++ b/app/MyClasses/ApiHelpers.php @@ -0,0 +1,19 @@ +json(['message' => $message, 'payload' => $payload, 'datetime' => now()->toDateTimeString(),], $status); + } +} diff --git a/routes/api.php b/routes/api.php index bcb8b18..92360fd 100644 --- a/routes/api.php +++ b/routes/api.php @@ -14,6 +14,8 @@ | */ -Route::middleware('auth:api')->get('/user', function (Request $request) { - return $request->user(); +Route::post('register', [\App\Http\Controllers\API\Auth\RegistrationController::class, 'register']); + +Route::group(['middleware' => ['auth:api']], function(){ + Route::post('change-password', [\App\Http\Controllers\API\Auth\ChangePasswordController::class, 'changePassword']); });