From dd4e20f344682f1b73908b875e7e856fe1a99053 Mon Sep 17 00:00:00 2001 From: Sai16F Date: Sun, 13 Apr 2025 15:54:34 +0200 Subject: [PATCH] All Tests Passed --- .../Auth/RegisteredUserController.php | 47 ++++++++++++++----- app/Http/Controllers/ProfileController.php | 15 +++++- app/Models/User.php | 2 +- resources/views/auth/login.blade.php | 9 +++- resources/views/auth/profile.blade.php | 8 +--- resources/views/layouts/navigation.blade.php | 2 + routes/web.php | 17 +++++-- 7 files changed, 73 insertions(+), 27 deletions(-) diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php index d8d29eb5..635aa07d 100644 --- a/app/Http/Controllers/Auth/RegisteredUserController.php +++ b/app/Http/Controllers/Auth/RegisteredUserController.php @@ -33,23 +33,44 @@ public function create() */ public function store(Request $request) { - // Task: change validation rule to include at least one letter - $request->validate([ - 'name' => ['required', 'string', 'max:255'], - 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], - 'password' => ['required', 'confirmed', Rules\Password::defaults()], - ]); - - $user = User::create([ - 'name' => $request->name, - 'email' => $request->email, - 'password' => Hash::make($request->password), - ]); - + $validated = $this->validateRegistration($request); + + $user = $this->createUser($validated); + event(new Registered($user)); Auth::login($user); return redirect(RouteServiceProvider::HOME); } + + /** + * Validate the registration request. + * + * @param Request $request + * @return array + */ + private function validateRegistration(Request $request): array + { + return $request->validate([ + 'name' => ['required', 'string', 'max:255'], + 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], + 'password' => ['required', 'confirmed', Rules\Password::defaults()->letters()], + ]); + } + + /** + * Create a new user instance. + * + * @param array $data + * @return User + */ + private function createUser(array $data): User + { + return User::create([ + 'name' => $data['name'], + 'email' => $data['email'], + 'password' => Hash::make($data['password']), + ]); + } } diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index e0093a49..4a97bb52 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -2,19 +2,32 @@ namespace App\Http\Controllers; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Hash; use App\Http\Requests\ProfileUpdateRequest; class ProfileController extends Controller { public function show() { - return view('auth.profile'); + return view('auth.profile', [ + 'user' => Auth::user() + ]); } 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(); + $user->name = $request->name; + $user->email = $request->email; + + if ($request->filled('password')) { + $user->password = Hash::make($request->password); + } + + $user->save(); return redirect()->route('profile.show')->with('success', 'Profile updated.'); } 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/login.blade.php b/resources/views/auth/login.blade.php index 63d53365..a64f99a9 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -40,7 +40,13 @@ -
+
+ @if (Route::has('register')) + + {{ __('Register') }} + + @endif + @if (Route::has('password.request')) {{ __('Forgot your password?') }} @@ -50,6 +56,7 @@ {{ __('Log in') }} +
diff --git a/resources/views/auth/profile.blade.php b/resources/views/auth/profile.blade.php index 70e8a8e1..c7987378 100644 --- a/resources/views/auth/profile.blade.php +++ b/resources/views/auth/profile.blade.php @@ -19,17 +19,13 @@ @method('PUT')
- Task: replace ??? for name/email with logged in user's name/email -

- - {{-- Task: replace ??? for name/email with logged in user's name/email --}}
@@ -40,7 +36,7 @@ class="block mt-1 w-full" class="block mt-1 w-full" type="email" name="email" - value="???" + :value="old('email', $user->email)" required />
diff --git a/resources/views/layouts/navigation.blade.php b/resources/views/layouts/navigation.blade.php index 785936e7..6323af4c 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..23c543c6 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,6 +1,8 @@ name('home'); -Route::get('users', [\App\Http\Controllers\UserController::class, 'index'])->name('users.index'); +Route::get('users', [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', [ProfileController::class, 'show'])->name('profile.show'); + Route::put('profile', [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'); +Route::middleware(['auth', 'verified'])->group(function () { + 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') + ->middleware(['auth', 'password.confirm']) ->name('verysecretpage'); require __DIR__.'/auth.php';