update-password-form.blade.php (2823B)
1 <?php 2 3 use Illuminate\Support\Facades\Hash; 4 use Illuminate\Validation\Rules\Password; 5 use Illuminate\Validation\ValidationException; 6 use Livewire\Volt\Component; 7 8 new class extends Component 9 { 10 public string $current_password = ''; 11 12 public string $password = ''; 13 14 public string $password_confirmation = ''; 15 16 public function updatePassword(): void 17 { 18 try { 19 $validated = $this->validate([ 20 'current_password' => ['required', 'string', 'current_password'], 21 'password' => ['required', 'string', Password::defaults(), 'confirmed'], 22 ]); 23 } catch (ValidationException $e) { 24 $this->reset('current_password', 'password', 'password_confirmation'); 25 26 throw $e; 27 } 28 29 auth()->user()->update([ 30 'password' => Hash::make($validated['password']), 31 ]); 32 33 $this->reset('current_password', 'password', 'password_confirmation'); 34 35 $this->dispatch('password-updated'); 36 } 37 }; ?> 38 39 <section> 40 <header> 41 <h2 class="text-lg font-medium text-gray-900 dark:text-gray-100"> 42 {{ __('Update Password') }} 43 </h2> 44 45 <p class="mt-1 text-sm text-gray-600 dark:text-gray-400"> 46 {{ __('Ensure your account is using a long, random password to stay secure.') }} 47 </p> 48 </header> 49 50 <form wire:submit="updatePassword" class="mt-6 space-y-6"> 51 <div> 52 <x-input-label for="current_password" :value="__('Current Password')" /> 53 <x-text-input wire:model="current_password" id="current_password" name="current_password" type="password" class="mt-1 block w-full" autocomplete="current-password" /> 54 <x-input-error :messages="$errors->get('current_password')" class="mt-2" /> 55 </div> 56 57 <div> 58 <x-input-label for="password" :value="__('New Password')" /> 59 <x-text-input wire:model="password" id="password" name="password" type="password" class="mt-1 block w-full" autocomplete="new-password" /> 60 <x-input-error :messages="$errors->get('password')" class="mt-2" /> 61 </div> 62 63 <div> 64 <x-input-label for="password_confirmation" :value="__('Confirm Password')" /> 65 <x-text-input wire:model="password_confirmation" id="password_confirmation" name="password_confirmation" type="password" class="mt-1 block w-full" autocomplete="new-password" /> 66 <x-input-error :messages="$errors->get('password_confirmation')" class="mt-2" /> 67 </div> 68 69 <div class="flex items-center gap-4"> 70 <x-primary-button>{{ __('Save') }}</x-primary-button> 71 72 <x-action-message class="mr-3" on="password-updated"> 73 {{ __('Saved.') }} 74 </x-action-message> 75 </div> 76 </form> 77 </section>