diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index fc6e3cb..b622b20 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -3,13 +3,16 @@ namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; +use App\Models\System\Verification; use App\Models\User; +use App\Rules\PhoneCodeVerification; use Illuminate\Auth\Events\Registered; use Illuminate\Contracts\View\View; use Illuminate\Foundation\Auth\RegistersUsers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; +use Laravel\Nova\Nova; use Illuminate\Support\Facades\Validator; class RegisterController extends Controller @@ -100,8 +103,18 @@ class RegisterController extends Controller /** * Verify sms code */ - public function verifySmsCode() + public function verifySmsCode(Request $request) { - + $this->middleware('auth'); + + $request->validate([ + 'code' => ['required', 'integer', new PhoneCodeVerification()] + ]); + + auth()->user()->update([ + 'phone_verified_at' => now() + ]); + + return redirect(Nova::path()); } } diff --git a/app/Http/Middleware/CheckPhoneVerification.php b/app/Http/Middleware/CheckPhoneVerification.php new file mode 100644 index 0000000..fff8f90 --- /dev/null +++ b/app/Http/Middleware/CheckPhoneVerification.php @@ -0,0 +1,28 @@ +check()) { + return redirect('/login'); + } + + if (! auth()->user()->isSystemUser() && is_null(auth()->user()->phone_verified_at)) { + return to_route('sms-verification'); + } + + return $next($request); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 313a46d..5dadf0b 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -29,6 +29,7 @@ class User extends Authenticatable 'email', 'phone', 'email_verified_at', + 'phone_verified_at', 'password', 'locale', 'active', @@ -98,6 +99,14 @@ class User extends Authenticatable return $this->hasRole('operator'); } + /** + * Is System User + */ + public function isSystemUser(): bool + { + return $this->isAdmin() || $this->isOperator(); + } + /** * Check if user owns loan order. */ diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index 78ba8be..18d8ac6 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -45,6 +45,6 @@ class AuthServiceProvider extends ServiceProvider { Gate::define('isMe', fn ($user) => $user->isMe()); Gate::define('isAdmin', fn ($user) => $user->isAdmin()); - Gate::define('systemUser', fn ($user) => $user->isAdmin() || $user->isOperator()); + Gate::define('systemUser', fn ($user) => $user->isSystemUser()); } } diff --git a/app/Rules/PhoneCodeVerification.php b/app/Rules/PhoneCodeVerification.php new file mode 100644 index 0000000..05e1bc6 --- /dev/null +++ b/app/Rules/PhoneCodeVerification.php @@ -0,0 +1,25 @@ +user()->phone) + ->where('code', $request->verification_code) + ->first(); + + if (! $verification) { + $fail(__('Write a correct data please')); + } + } +} diff --git a/config/nova.php b/config/nova.php index eae393b..41cc995 100644 --- a/config/nova.php +++ b/config/nova.php @@ -1,5 +1,6 @@ [ diff --git a/lang/tk.json b/lang/tk.json index 9ce99c2..ae5214a 100644 --- a/lang/tk.json +++ b/lang/tk.json @@ -218,5 +218,6 @@ "Username": "Ulanyjy ady", "Go to login page": "Login sahypa geç", "Submit": "Tassyklamak", - "Verification code": "Tassyklaýyş belgi" + "Verification code": "Tassyklaýyş belgi", + "Please, verify your phone": "Telefon beligiňizi tassyklamagyňyzy haýyş edýäris." } diff --git a/lang/vendor/nova/tk.json b/lang/vendor/nova/tk.json index fe75e51..3c77db4 100644 --- a/lang/vendor/nova/tk.json +++ b/lang/vendor/nova/tk.json @@ -192,7 +192,7 @@ "Haiti": "Gaiti", "Heard Island & Mcdonald Islands": "Heard adasy we Makdonalds adalary", "Hide Content": "Mazmuny gizläň", - "Hold Up!": "Saklamak!", + "Hold Up!": "Näsazlyk!", "Holy See (Vatican City State)": "Vatican City", "Honduras": "Gonduras", "Hong Kong": "Gonkong", diff --git a/resources/views/vendor/nova/pages/sms-verification.blade.php b/resources/views/vendor/nova/pages/sms-verification.blade.php index 4c2d968..fae0bee 100644 --- a/resources/views/vendor/nova/pages/sms-verification.blade.php +++ b/resources/views/vendor/nova/pages/sms-verification.blade.php @@ -24,7 +24,7 @@ {{ __('Online panel') }}