Register page should work

This commit is contained in:
2023-12-02 14:36:38 +05:00
parent 71da05f019
commit 306ee0f8a5
10 changed files with 87 additions and 7 deletions

View File

@@ -3,13 +3,16 @@
namespace App\Http\Controllers\Auth; namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\System\Verification;
use App\Models\User; use App\Models\User;
use App\Rules\PhoneCodeVerification;
use Illuminate\Auth\Events\Registered; use Illuminate\Auth\Events\Registered;
use Illuminate\Contracts\View\View; use Illuminate\Contracts\View\View;
use Illuminate\Foundation\Auth\RegistersUsers; use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use Laravel\Nova\Nova;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
class RegisterController extends Controller class RegisterController extends Controller
@@ -100,8 +103,18 @@ class RegisterController extends Controller
/** /**
* Verify sms code * 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());
} }
} }

View File

@@ -0,0 +1,28 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class CheckPhoneVerification
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
if (! auth()->check()) {
return redirect('/login');
}
if (! auth()->user()->isSystemUser() && is_null(auth()->user()->phone_verified_at)) {
return to_route('sms-verification');
}
return $next($request);
}
}

View File

@@ -29,6 +29,7 @@ class User extends Authenticatable
'email', 'email',
'phone', 'phone',
'email_verified_at', 'email_verified_at',
'phone_verified_at',
'password', 'password',
'locale', 'locale',
'active', 'active',
@@ -98,6 +99,14 @@ class User extends Authenticatable
return $this->hasRole('operator'); return $this->hasRole('operator');
} }
/**
* Is System User
*/
public function isSystemUser(): bool
{
return $this->isAdmin() || $this->isOperator();
}
/** /**
* Check if user owns loan order. * Check if user owns loan order.
*/ */

View File

@@ -45,6 +45,6 @@ class AuthServiceProvider extends ServiceProvider
{ {
Gate::define('isMe', fn ($user) => $user->isMe()); Gate::define('isMe', fn ($user) => $user->isMe());
Gate::define('isAdmin', fn ($user) => $user->isAdmin()); Gate::define('isAdmin', fn ($user) => $user->isAdmin());
Gate::define('systemUser', fn ($user) => $user->isAdmin() || $user->isOperator()); Gate::define('systemUser', fn ($user) => $user->isSystemUser());
} }
} }

View File

@@ -0,0 +1,25 @@
<?php
namespace App\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
class PhoneCodeVerification implements ValidationRule
{
/**
* Run the validation rule.
*
* @param \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString $fail
*/
public function validate(string $attribute, mixed $value, Closure $fail): void
{
$verification = Verification::where('username', auth()->user()->phone)
->where('code', $request->verification_code)
->first();
if (! $verification) {
$fail(__('Write a correct data please'));
}
}
}

View File

@@ -1,5 +1,6 @@
<?php <?php
use App\Http\Middleware\CheckPhoneVerification;
use Laravel\Nova\Actions\ActionResource; use Laravel\Nova\Actions\ActionResource;
use Laravel\Nova\Http\Middleware\Authenticate; use Laravel\Nova\Http\Middleware\Authenticate;
use Laravel\Nova\Http\Middleware\Authorize; use Laravel\Nova\Http\Middleware\Authorize;
@@ -103,6 +104,7 @@ return [
HandleInertiaRequests::class, HandleInertiaRequests::class,
DispatchServingNovaEvent::class, DispatchServingNovaEvent::class,
BootTools::class, BootTools::class,
CheckPhoneVerification::class,
], ],
'api_middleware' => [ 'api_middleware' => [

View File

@@ -218,5 +218,6 @@
"Username": "Ulanyjy ady", "Username": "Ulanyjy ady",
"Go to login page": "Login sahypa geç", "Go to login page": "Login sahypa geç",
"Submit": "Tassyklamak", "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."
} }

View File

@@ -192,7 +192,7 @@
"Haiti": "Gaiti", "Haiti": "Gaiti",
"Heard Island & Mcdonald Islands": "Heard adasy we Makdonalds adalary", "Heard Island & Mcdonald Islands": "Heard adasy we Makdonalds adalary",
"Hide Content": "Mazmuny gizläň", "Hide Content": "Mazmuny gizläň",
"Hold Up!": "Saklamak!", "Hold Up!": "Näsazlyk!",
"Holy See (Vatican City State)": "Vatican City", "Holy See (Vatican City State)": "Vatican City",
"Honduras": "Gonduras", "Honduras": "Gonduras",
"Hong Kong": "Gonkong", "Hong Kong": "Gonkong",

View File

@@ -24,7 +24,7 @@
<span class="text-4xl">{{ __('Online panel') }}</span> <span class="text-4xl">{{ __('Online panel') }}</span>
</div> </div>
<div> <div>
<form class="bg-white dark:bg-gray-800 shadow rounded-lg p-8 max-w-[25rem] mx-auto" method="POST" action="{{ route('login') }}"> <form class="bg-white dark:bg-gray-800 shadow rounded-lg p-8 max-w-[25rem] mx-auto" method="POST" action="{{ route('sms-verification') }}">
@csrf @csrf
<h2 class="text-2xl text-center font-normal mb-6">{{ __('Verify Phone Number') }}</h2> <h2 class="text-2xl text-center font-normal mb-6">{{ __('Verify Phone Number') }}</h2>
<svg class="block mx-auto mb-6" xmlns="http://www.w3.org/2000/svg" width="100" height="2" viewBox="0 0 100 2"> <svg class="block mx-auto mb-6" xmlns="http://www.w3.org/2000/svg" width="100" height="2" viewBox="0 0 100 2">

View File

@@ -16,9 +16,11 @@ use Illuminate\Support\Facades\Route;
*/ */
Route::get('/register', [RegisterController::class, 'showNovaRegisterpageForm'])->name('register'); Route::get('/register', [RegisterController::class, 'showNovaRegisterpageForm'])->name('register');
Route::get('sms-verification', [RegisterController::class, 'smsVerification'])->name('sms-verification');
Route::post('/register', [RegisterController::class, 'register']); Route::post('/register', [RegisterController::class, 'register']);
Route::get('sms-verification', [RegisterController::class, 'smsVerification'])->name('sms-verification');
Route::post('sms-verification', [RegisterController::class, 'verifySmsCode']);
Route::get('/login', [LoginController::class, 'showLoginForm'])->name('login'); Route::get('/login', [LoginController::class, 'showLoginForm'])->name('login');
Route::post('/login', [LoginController::class, 'login']); Route::post('/login', [LoginController::class, 'login']);