From fd9b4ca7532bc89e84cc444898c5113d9e011c0b Mon Sep 17 00:00:00 2001 From: abdulrahman_204 Date: Sat, 31 May 2025 14:59:18 +0300 Subject: [PATCH 1/2] passed --- .../Auth/RegisteredUserController.php | 2 +- app/Http/Controllers/ProfileController.php | 12 ++++- app/Http/Requests/ProfileUpdateRequest.php | 5 +- app/Models/User.php | 2 +- resources/views/auth/profile.blade.php | 4 +- resources/views/layouts/navigation.blade.php | 2 + routes/web.php | 50 +++++++++++-------- 7 files changed, 48 insertions(+), 29 deletions(-) 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([ diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index e0093a49..37d7a017 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -3,6 +3,9 @@ namespace App\Http\Controllers; use App\Http\Requests\ProfileUpdateRequest; +use App\Models\User; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Hash; class ProfileController extends Controller { @@ -15,7 +18,14 @@ 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(); + $validated = $request->validated(); + if (isset($validated['password'])) { + $validated['password'] = Hash::make($validated['password']); + } else { + unset($validated['password']); + } + $user->update($validated); return redirect()->route('profile.show')->with('success', 'Profile updated.'); } } diff --git a/app/Http/Requests/ProfileUpdateRequest.php b/app/Http/Requests/ProfileUpdateRequest.php index 2846c7bd..b3078baa 100644 --- a/app/Http/Requests/ProfileUpdateRequest.php +++ b/app/Http/Requests/ProfileUpdateRequest.php @@ -10,12 +10,12 @@ class ProfileUpdateRequest extends FormRequest { public function rules() { - return [ + return [ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'email', 'string', 'max:255', Rule::unique('users')->ignore(Auth::user())], 'password' => ['sometimes', 'required_with:old_password', 'string', 'confirmed', 'min:8'], ]; - } + } public function authorize() { @@ -26,6 +26,7 @@ protected function prepareForValidation() { if ($this->password == null) { $this->request->remove('password'); + $this->request->remove('password_confirmation'); } } } 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; diff --git a/resources/views/auth/profile.blade.php b/resources/views/auth/profile.blade.php index 70e8a8e1..c16e6902 100644 --- a/resources/views/auth/profile.blade.php +++ b/resources/views/auth/profile.blade.php @@ -29,7 +29,7 @@ class="block mt-1 w-full" type="text" name="name" - value="???" + value="{{ auth()->user()->name }}" required /> @@ -40,7 +40,7 @@ class="block mt-1 w-full" class="block mt-1 w-full" type="email" name="email" - value="???" + value="{{ auth()->user()->email }}" required /> diff --git a/resources/views/layouts/navigation.blade.php b/resources/views/layouts/navigation.blade.php index 785936e7..23733434 100644 --- a/resources/views/layouts/navigation.blade.php +++ b/resources/views/layouts/navigation.blade.php @@ -16,9 +16,11 @@ {{ __('Users') }} {{-- Task: this "Profile" link should be visible only to logged-in users --}} + @auth {{ __('Profile') }} + @endauth diff --git a/routes/web.php b/routes/web.php index 71d04297..8b944c03 100644 --- a/routes/web.php +++ b/routes/web.php @@ -12,25 +12,31 @@ | contains the "web" middleware group. Now create something great! | */ - -Route::get('/', function () { - return view('home'); -})->name('home'); - -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'); - -// 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'); - -// 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'); - -require __DIR__.'/auth.php'; +Route::middleware(['auth'])->group(function () { + + Route::get('/', function () { + return view('home'); + })->name('home'); + + Route::get('users', [\App\Http\Controllers\UserController::class, 'index'])->name('users.index'); + + // Task: profile functionality should be available only for logged-in users + 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')->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')->middleware(['password.confirm']); + +}); + require __DIR__.'/auth.php'; + \ No newline at end of file From e2c6516873e1a0a4cfc17493f8451bd35bd3b246 Mon Sep 17 00:00:00 2001 From: abdulrahman_204 Date: Sat, 31 May 2025 15:08:58 +0300 Subject: [PATCH 2/2] edit --- app/Http/Requests/ProfileUpdateRequest.php | 5 ++-- routes/web.php | 29 ++++++++++------------ 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/app/Http/Requests/ProfileUpdateRequest.php b/app/Http/Requests/ProfileUpdateRequest.php index b3078baa..2846c7bd 100644 --- a/app/Http/Requests/ProfileUpdateRequest.php +++ b/app/Http/Requests/ProfileUpdateRequest.php @@ -10,12 +10,12 @@ class ProfileUpdateRequest extends FormRequest { public function rules() { - return [ + return [ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'email', 'string', 'max:255', Rule::unique('users')->ignore(Auth::user())], 'password' => ['sometimes', 'required_with:old_password', 'string', 'confirmed', 'min:8'], ]; - } + } public function authorize() { @@ -26,7 +26,6 @@ protected function prepareForValidation() { if ($this->password == null) { $this->request->remove('password'); - $this->request->remove('password_confirmation'); } } } diff --git a/routes/web.php b/routes/web.php index 8b944c03..6a284a55 100644 --- a/routes/web.php +++ b/routes/web.php @@ -12,31 +12,28 @@ | contains the "web" middleware group. Now create something great! | */ -Route::middleware(['auth'])->group(function () { + +Route::middleware('auth')->group(function () { Route::get('/', function () { return view('home'); })->name('home'); - + Route::get('users', [\App\Http\Controllers\UserController::class, 'index'])->name('users.index'); - - // Task: profile functionality should be available only for logged-in users - 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: 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'); + + // 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')->middleware(['auth' , 'verified']); - + ->name('secretpage')->middleware('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')->middleware(['password.confirm']); - + ->name('verysecretpage')->middleware('password.confirm'); }); - require __DIR__.'/auth.php'; - \ No newline at end of file +require __DIR__ . '/auth.php';