diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php index d8d29eb5..e8ac84f0 100644 --- a/app/Http/Controllers/Auth/RegisteredUserController.php +++ b/app/Http/Controllers/Auth/RegisteredUserController.php @@ -2,14 +2,15 @@ namespace App\Http\Controllers\Auth; -use App\Http\Controllers\Controller; use App\Models\User; -use App\Providers\RouteServiceProvider; -use Illuminate\Auth\Events\Registered; use Illuminate\Http\Request; +use Illuminate\Validation\Rules; +use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; -use Illuminate\Validation\Rules; +use Illuminate\Auth\Events\Registered; +use App\Providers\RouteServiceProvider; +use Illuminate\Validation\Rules\Password; class RegisteredUserController extends Controller { @@ -37,7 +38,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', Password::defaults()->letters()], ]); $user = User::create([ diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index e0093a49..fb4807dd 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Hash; use App\Http\Requests\ProfileUpdateRequest; class ProfileController extends Controller @@ -11,10 +13,23 @@ public function show() return view('auth.profile'); } + // KunYuChang public function update(ProfileUpdateRequest $request) { - // Task: fill in the code here to update name and email - // Also, update the password if it is set + // Get the authenticated user + $user = auth()->user(); + + // Update name and email + $user->name = $request->name; + $user->email = $request->email; + + // Check if a new password is provided + if ($request->filled('password')) { + $user->password = bcrypt($request->password); + } + + // Save the updated user information to the database + $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/profile.blade.php b/resources/views/auth/profile.blade.php index 70e8a8e1..aa775f59 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..fbd176af 100644 --- a/resources/views/layouts/navigation.blade.php +++ b/resources/views/layouts/navigation.blade.php @@ -15,10 +15,14 @@ {{ __('Users') }} + {{-- KunYuChang --}} {{-- Task: this "Profile" link should be visible only to logged-in users --}} - - {{ __('Profile') }} - + @auth + + {{ __('Profile') }} + + @endauth + diff --git a/routes/web.php b/routes/web.php index 71d04297..9f8ce5c3 100644 --- a/routes/web.php +++ b/routes/web.php @@ -17,20 +17,24 @@ return view('home'); })->name('home'); -Route::get('users', [\App\Http\Controllers\UserController::class, 'index'])->name('users.index'); +Route::get('users', [\App\Http\Controllers\UserController::class, 'index']) + ->name('users.index'); +// KunYuChang // 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::get('profile', [\App\Http\Controllers\ProfileController::class, 'show'])->name('profile.show')->middleware('auth'); +Route::put('profile', [\App\Http\Controllers\ProfileController::class, 'update'])->name('profile.update')->middleware('auth'); // 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('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') + ->middleware(['auth', 'password.confirm']) ->name('verysecretpage'); require __DIR__.'/auth.php';