From 5f4d96ad30a82a6745b768e181581127f5bf40fd Mon Sep 17 00:00:00 2001 From: mohap710 Date: Thu, 23 Jan 2025 12:15:36 +0400 Subject: [PATCH 1/7] add custom middleware( not used ) to test my skills of extending the built-in middleware and customize it a further more if I want to. --- app/Http/Middleware/VerifyEmail.php | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 app/Http/Middleware/VerifyEmail.php diff --git a/app/Http/Middleware/VerifyEmail.php b/app/Http/Middleware/VerifyEmail.php new file mode 100644 index 00000000..a3080fed --- /dev/null +++ b/app/Http/Middleware/VerifyEmail.php @@ -0,0 +1,21 @@ + Date: Thu, 23 Jan 2025 12:16:28 +0400 Subject: [PATCH 2/7] update user data like name and email. hash the password if it's presented --- app/Http/Controllers/ProfileController.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index e0093a49..8ffc29ff 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Models\User; use App\Http\Requests\ProfileUpdateRequest; class ProfileController extends Controller @@ -15,6 +16,13 @@ public function update(ProfileUpdateRequest $request) { // Task: fill in the code here to update name and email // Also, update the password if it is set + $user = auth()->user(); + if ($request->has('password')) { + $user->password = \bcrypt($request->password); + } + $user->name = $request->name; + $user->email = $request->email; + $user->save(); return redirect()->route('profile.show')->with('success', 'Profile updated.'); } From 0cf0944eaed075161fa02c54bf49e08843389a49 Mon Sep 17 00:00:00 2001 From: mohap710 Date: Thu, 23 Jan 2025 12:16:48 +0400 Subject: [PATCH 3/7] ensure that password have at least one letter --- app/Http/Controllers/Auth/RegisteredUserController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php index d8d29eb5..64a2b2a6 100644 --- a/app/Http/Controllers/Auth/RegisteredUserController.php +++ b/app/Http/Controllers/Auth/RegisteredUserController.php @@ -37,7 +37,7 @@ public function store(Request $request) $request->validate([ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], - 'password' => ['required', 'confirmed', Rules\Password::defaults()], + 'password' => ['required', 'confirmed', Rules\Password::defaults()->letters()], ]); $user = User::create([ From ebf4b47e283e44f7b97f892ac50571b032e6bc25 Mon Sep 17 00:00:00 2001 From: mohap710 Date: Thu, 23 Jan 2025 12:17:21 +0400 Subject: [PATCH 4/7] replace the "???" with the current user data --- resources/views/auth/profile.blade.php | 38 ++++++++------------------ 1 file changed, 12 insertions(+), 26 deletions(-) diff --git a/resources/views/auth/profile.blade.php b/resources/views/auth/profile.blade.php index 70e8a8e1..24ec28f3 100644 --- a/resources/views/auth/profile.blade.php +++ b/resources/views/auth/profile.blade.php @@ -10,7 +10,7 @@
- + @@ -22,44 +22,30 @@ Task: replace ??? for name/email with logged in user's name/email

- + - {{-- Task: replace ??? for name/email with logged in user's name/email --}} - +
- + - +
- + - +
- + - +
From d3c0b51dc49d812316c6b815e9ddeecc3c59d596 Mon Sep 17 00:00:00 2001 From: mohap710 Date: Thu, 23 Jan 2025 12:17:54 +0400 Subject: [PATCH 5/7] show profile link for auth users only using @auth --- resources/views/layouts/navigation.blade.php | 42 ++++++++++---------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/resources/views/layouts/navigation.blade.php b/resources/views/layouts/navigation.blade.php index 785936e7..d9a0be1b 100644 --- a/resources/views/layouts/navigation.blade.php +++ b/resources/views/layouts/navigation.blade.php @@ -6,7 +6,7 @@ @@ -15,10 +15,11 @@ {{ __('Users') }} - {{-- Task: this "Profile" link should be visible only to logged-in users --}} + @auth {{ __('Profile') }} + @endauth
@@ -33,10 +34,10 @@ class="flex items-center text-sm font-medium text-gray-500 transition duration-1
+ viewBox="0 0 20 20"> + d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" + clip-rule="evenodd" />
@@ -55,24 +56,25 @@ class="flex items-center text-sm font-medium text-gray-500 transition duration-1 @else - Log in + Log in - @if (Route::has('register')) - Register - @endif + @if (Route::has('register')) + Register + @endif @endauth
@@ -83,7 +85,7 @@ class="inline-flex justify-center items-center p-2 text-gray-400 rounded-md tran From ed15a90c0982063f7043ec558abd9538a27a1bf6 Mon Sep 17 00:00:00 2001 From: mohap710 Date: Thu, 23 Jan 2025 12:18:08 +0400 Subject: [PATCH 6/7] implemnts MustVerifyEmail --- app/Models/User.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Models/User.php b/app/Models/User.php index e23e0905..12a2354b 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -8,7 +8,7 @@ use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens; -class User extends Authenticatable +class User extends Authenticatable implements MustVerifyEmail { use HasApiTokens, HasFactory, Notifiable; From 1f6bc6a3a570d0f00715197dc791e536c9423b3a Mon Sep 17 00:00:00 2001 From: mohap710 Date: Thu, 23 Jan 2025 12:18:54 +0400 Subject: [PATCH 7/7] added middlewares ["auht","verified","password.confirm"] --- routes/web.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/routes/web.php b/routes/web.php index 71d04297..8d868338 100644 --- a/routes/web.php +++ b/routes/web.php @@ -20,17 +20,19 @@ Route::get('users', [\App\Http\Controllers\UserController::class, 'index'])->name('users.index'); // Task: profile functionality should be available only for logged-in users -Route::get('profile', [\App\Http\Controllers\ProfileController::class, 'show'])->name('profile.show'); -Route::put('profile', [\App\Http\Controllers\ProfileController::class, 'update'])->name('profile.update'); +Route::middleware(["auth"])->group(function () { + Route::get('profile', [\App\Http\Controllers\ProfileController::class, 'show'])->name('profile.show'); + Route::put('profile', [\App\Http\Controllers\ProfileController::class, 'update'])->name('profile.update'); +}); // Task: this "/secretpage" URL should be visible only for those who VERIFIED their email // Add some middleware here, and change some code in app/Models/User.php to enable this Route::view('/secretpage', 'secretpage') - ->name('secretpage'); + ->name('secretpage')->middleware(["auth", "verified"]); // Task: this "/verysecretpage" URL should ask user for verifying their password once again // You need to add some middleware here Route::view('/verysecretpage', 'verysecretpage') - ->name('verysecretpage'); + ->name('verysecretpage')->middleware("password.confirm"); -require __DIR__.'/auth.php'; +require __DIR__ . '/auth.php';