diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php new file mode 100644 index 0000000..fd147a8 --- /dev/null +++ b/app/Http/Controllers/DashboardController.php @@ -0,0 +1,11 @@ +with('canLogin', Route::has('login')) + ->with('canRegister', Route::has('register')); + } +} diff --git a/app/Http/Controllers/NeedVerificationController.php b/app/Http/Controllers/NeedVerificationController.php new file mode 100644 index 0000000..05a3a9d --- /dev/null +++ b/app/Http/Controllers/NeedVerificationController.php @@ -0,0 +1,11 @@ +toArray(), 'location' => $request->url(), ], + 'currentYear' => now()->year, + 'canLogin' => Route::has('login'), + 'canRegister' => Route::has('register'), ]; } } diff --git a/app/Http/Middleware/ProfileVerificationMiddleware.php b/app/Http/Middleware/ProfileVerificationMiddleware.php new file mode 100644 index 0000000..dec2a0a --- /dev/null +++ b/app/Http/Middleware/ProfileVerificationMiddleware.php @@ -0,0 +1,22 @@ +user()->verified_at) && !($request->routeIs('profile.need-verification') || $request->routeIs('index'))) { + return redirect()->route('profile.need-verification'); + } + + if(!empty($request->user()->verified_at) && $request->routeIs('profile.need-verification')) { + return redirect()->route('dashboard'); + } + + return $next($request); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 749c7b7..decd682 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -21,6 +21,7 @@ class User extends Authenticatable 'name', 'email', 'password', + 'verified_at' ]; /** @@ -41,6 +42,7 @@ class User extends Authenticatable protected function casts(): array { return [ + 'verified_at' => 'datetime', 'email_verified_at' => 'datetime', 'password' => 'hashed', ]; diff --git a/database/migrations/2024_12_30_212840_add_verified_at_to_users_table.php b/database/migrations/2024_12_30_212840_add_verified_at_to_users_table.php new file mode 100644 index 0000000..4fc4f77 --- /dev/null +++ b/database/migrations/2024_12_30_212840_add_verified_at_to_users_table.php @@ -0,0 +1,22 @@ +getTable(), function (Blueprint $table) { + $table->timestamp('verified_at')->nullable(); + }); + } + + public function down(): void + { + Schema::table(app(User::class)->getTable(), function (Blueprint $table) { + $table->dropColumn('verified_at'); + }); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index d01a0ef..625e954 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -13,11 +13,6 @@ class DatabaseSeeder extends Seeder */ public function run(): void { - // User::factory(10)->create(); - - User::factory()->create([ - 'name' => 'Test User', - 'email' => 'test@example.com', - ]); + $this->call(UsersSeeder::class); } } diff --git a/database/seeders/UsersSeeder.php b/database/seeders/UsersSeeder.php new file mode 100644 index 0000000..88a5b39 --- /dev/null +++ b/database/seeders/UsersSeeder.php @@ -0,0 +1,25 @@ + 'admin@naggadim.ru'], + [ + 'name' => 'Dmitry Smertin', + 'email' => 'admin@naggadim.ru', + 'password' => bcrypt('password'), + 'verified_at' => now(), + 'email_verified_at' => now(), + ] + ); + + echo "User \"admin@naggadim.ru\" created\n"; + } +} diff --git a/resources/js/Layouts/GuestLayout.vue b/resources/js/Layouts/GuestLayout.vue index da02370..913d244 100644 --- a/resources/js/Layouts/GuestLayout.vue +++ b/resources/js/Layouts/GuestLayout.vue @@ -1,22 +1,86 @@ + + + + + + + + + + + + + + + + + + diff --git a/resources/js/Pages/Auth/Login.vue b/resources/js/Pages/Auth/Login.vue index 4929f2c..ef94ed0 100644 --- a/resources/js/Pages/Auth/Login.vue +++ b/resources/js/Pages/Auth/Login.vue @@ -31,7 +31,7 @@ const submit = () => {