auth()->user(), // Chi arriva qui spontaneamente (dal profilo) puo' tornare indietro; // chi e' stato dirottato dal middleware no. 'forced' => (bool) auth()->user()->password_change_required, ]); } public function store(Request $request) { // La password attuale NON viene richiesta, ed e' una scelta. // // Il ripristino sovrascrive gli hash con quelli del backup: subito dopo, // la "password attuale" di un account e' quella che aveva all'epoca del // backup, che l'utente puo' benissimo non ricordare — l'amministratore // che ha appena fatto il restore per primo. Chiederla bloccherebbe fuori // proprio le persone che questa schermata deve sbloccare. La garanzia // qui e' la sessione: si arriva a questa pagina gia' autenticati. $validated = $request->validate([ 'password' => ['required', 'confirmed', Password::min(8)], ], [ 'password.required' => 'Inserisci la nuova password.', 'password.confirmed' => 'Le due password non coincidono.', ]); $user = $request->user(); // Il cast `hashed` sul modello cifra il valore al salvataggio. $user->update([ 'password' => $validated['password'], 'password_change_required' => false, ]); // La sessione corrente sopravvive al cambio, le altre no: dopo un // ripristino le vecchie credenziali sono da considerarsi compromesse e // una sessione aperta altrove lo e' altrettanto. $request->session()->regenerate(); $user->setRememberToken(null); $user->save(); activity()->causedBy($user)->log('password changed'); return redirect()->route('dashboard') ->with('success', 'Password aggiornata. Da ora accedi con quella nuova.'); } }