user(); $this->name = $user->name; $this->email = $user->email; } public function updateProfile() { $user = auth()->user(); $validated = $this->validate([ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'email', 'max:255', Rule::unique('users', 'email')->ignore($user->id)], ]); $user->update([ 'name' => $validated['name'], 'email' => $validated['email'], ]); session()->flash('profile_success', 'Profilo aggiornato con successo.'); // Ricarica la pagina così header e card mostrano subito i nuovi dati // (l'header vive nel layout, fuori dal componente). return $this->redirect(route('profile'), navigate: true); } public function updatePassword(): void { // `current_password` verifica che la password attuale digitata combaci // con quella dell'utente loggato prima di consentire il cambio. $this->validate([ 'current_password' => ['required', 'current_password'], 'password' => ['required', 'string', 'min:8', 'confirmed'], ]); // Il cast `hashed` sul modello User cifra il valore in fase di salvataggio. // // Si spegne anche `password_change_required`: oggi chi ha quel flag // viene dirottato dal middleware e questa pagina non la raggiunge // nemmeno, ma la condizione che il flag esprime — "questa password non // e' piu' un segreto" — la soddisfa qualunque cambio, non solo quello // fatto dalla schermata obbligatoria. Lasciarlo acceso qui // significherebbe che un domani, allentando il middleware, l'utente // resterebbe bloccato dopo aver gia' fatto quello che gli si chiedeva. auth()->user()->update([ 'password' => $this->password, 'password_change_required' => false, ]); $this->reset(['current_password', 'password', 'password_confirmation']); $this->avvisa('Password aggiornata con successo.'); } public function render() { return view('livewire.profile', [ 'user' => auth()->user(), ]); } }