From 4911a37cfdb296bedab177fa42855a363568c33f Mon Sep 17 00:00:00 2001 From: Nurmuhammet Allanov Date: Mon, 22 Sep 2025 18:31:00 +0500 Subject: [PATCH] someshit going on --- app/Filament/Pages/Auth/Register.php | 6 +++ .../Auth/OTPVericationController.php | 30 ++++++++++++++ .../Auth/OTPVerificationController.php | 29 ++++++++++++++ .../EnsurePhoneNumberIsValidated.php | 24 ++++++++++++ .../RedirectIfPhoneNumberIsVerified.php | 24 ++++++++++++ .../Rules/OTPVerificationRule.php | 32 +++++++++++++++ app/Providers/Filament/AdminPanelProvider.php | 2 + .../views/pages/auth/otp-verify.blade.php | 39 +++++++++++++++++++ routes/web.php | 8 ++++ 9 files changed, 194 insertions(+) create mode 100644 app/Http/Controllers/Auth/OTPVericationController.php create mode 100644 app/Http/Controllers/Auth/OTPVerificationController.php create mode 100644 app/Http/Middleware/EnsurePhoneNumberIsValidated.php create mode 100644 app/Http/Middleware/RedirectIfPhoneNumberIsVerified.php create mode 100644 app/Modules/OTPVerification/Rules/OTPVerificationRule.php create mode 100644 resources/views/pages/auth/otp-verify.blade.php diff --git a/app/Filament/Pages/Auth/Register.php b/app/Filament/Pages/Auth/Register.php index c1f947e..a258ec0 100644 --- a/app/Filament/Pages/Auth/Register.php +++ b/app/Filament/Pages/Auth/Register.php @@ -32,11 +32,17 @@ class Register extends BaseRegister protected function beforeValidate(): void { + info(['$this->data' => $this->data]); if (isset($this->data['phone_number'])) { $this->data['phone_number'] = str_replace(' ', '', $this->data['phone_number']); } } + protected function afterRegister(): void + { + module('SMS')->verify($this->data['phone_number']); + } + protected function mutateFormDataBeforeRegister(array $data): array { $data['phone_number'] = str_replace(' ', '', $data['phone_number']); diff --git a/app/Http/Controllers/Auth/OTPVericationController.php b/app/Http/Controllers/Auth/OTPVericationController.php new file mode 100644 index 0000000..99a8efa --- /dev/null +++ b/app/Http/Controllers/Auth/OTPVericationController.php @@ -0,0 +1,30 @@ +validate([ + 'code' => ['required', 'integer', new OTPVerificationRule(auth()->user()->phone_number)], + ]); + + User::find(auth()->id())->update([ + 'phone_number_verified_at' => now(), + ]); + + return redirect('/'); + } +} diff --git a/app/Http/Controllers/Auth/OTPVerificationController.php b/app/Http/Controllers/Auth/OTPVerificationController.php new file mode 100644 index 0000000..16dd706 --- /dev/null +++ b/app/Http/Controllers/Auth/OTPVerificationController.php @@ -0,0 +1,29 @@ +validate([ + 'code' => ['required', 'integer', new OTPVerificationRule(auth()->user()->phone_number)], + ]); + + auth()->user()->update([ + 'phone_number_verified_at' => now(), + ]); + + return redirect('/'); + } +} diff --git a/app/Http/Middleware/EnsurePhoneNumberIsValidated.php b/app/Http/Middleware/EnsurePhoneNumberIsValidated.php new file mode 100644 index 0000000..2c5a882 --- /dev/null +++ b/app/Http/Middleware/EnsurePhoneNumberIsValidated.php @@ -0,0 +1,24 @@ +user() && ! $request->user()->phone_number_verified_at) { + return redirect()->route('otp.verify'); + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/RedirectIfPhoneNumberIsVerified.php b/app/Http/Middleware/RedirectIfPhoneNumberIsVerified.php new file mode 100644 index 0000000..d32a24d --- /dev/null +++ b/app/Http/Middleware/RedirectIfPhoneNumberIsVerified.php @@ -0,0 +1,24 @@ +user() && $request->user()->phone_number_verified_at) { + return redirect('/'); + } + + return $next($request); + } +} diff --git a/app/Modules/OTPVerification/Rules/OTPVerificationRule.php b/app/Modules/OTPVerification/Rules/OTPVerificationRule.php new file mode 100644 index 0000000..8544a7c --- /dev/null +++ b/app/Modules/OTPVerification/Rules/OTPVerificationRule.php @@ -0,0 +1,32 @@ +username) { + $fail(__('Write a correct data please')); + + return; + } + + OTPVerification::where('username', $this->username) + ->where('code', $value) + ->existsOr(fn () => $fail(__('Write a correct data please'))); + } +} diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index e8a08a4..ad4ac74 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -4,6 +4,7 @@ namespace App\Providers\Filament; use App\Filament\Pages\Auth\Login; use App\Filament\Pages\Auth\Register; +use App\Http\Middleware\EnsurePhoneNumberIsValidated; use Filament\Http\Middleware\Authenticate; use Filament\Http\Middleware\DisableBladeIconComponents; use Filament\Http\Middleware\DispatchServingFilamentEvent; @@ -49,6 +50,7 @@ class AdminPanelProvider extends PanelProvider ShareErrorsFromSession::class, VerifyCsrfToken::class, SubstituteBindings::class, + EnsurePhoneNumberIsValidated::class, DisableBladeIconComponents::class, DispatchServingFilamentEvent::class, ]) diff --git a/resources/views/pages/auth/otp-verify.blade.php b/resources/views/pages/auth/otp-verify.blade.php new file mode 100644 index 0000000..c957f2b --- /dev/null +++ b/resources/views/pages/auth/otp-verify.blade.php @@ -0,0 +1,39 @@ + +
+
+

+ OTP Verification +

+ +

+ We've sent a verification code to your phone number. Please enter it below. +

+ +
+ @csrf + +
+ +
+ +
+ @error('code') +

{{ $message }}

+ @enderror +
+ + +
+ +
+
+
+
+
\ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 188e914..8d70d53 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,5 +1,13 @@ group(function () { + Route::get('otp/verify', [OTPVerificationController::class, 'index'])->name('otp.verify'); + Route::post('otp/verify', [OTPVerificationController::class, 'store'])->name('otp.verify.store'); +}); +