user(); return view('auth.password-change', [ 'user' => $user, // Chi arriva qui spontaneamente (dal profilo) puo' tornare indietro; // chi e' stato dirottato dal middleware no. 'forced' => (bool) $user->password_change_required, // Il ripristino gira in coda e non ha una sessione in cui lasciare // un flash; deposita l'esito in cache a nome di chi l'ha avviato e // lo si legge qui, che e' la prima pagina che quella persona vede. // // Si legge senza consumare, e si cancella solo a password cambiata. // Con un pull, il messaggio non arriverebbe mai a schermo: quando e' // il middleware a dirottare una richiesta di Livewire, il client // segue il 302 via fetch — ed e' quella fetch a bruciare il // messaggio — per poi rifare la stessa GET con window.location, che // troverebbe la cache gia' vuota. 'esitoRipristino' => Cache::get(RestoreBackupArchive::CHIAVE_ESITO . $user->id), ]); } 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(); // L'esito del ripristino ha esaurito il suo scopo: e' stato letto, e la // password richiesta e' stata impostata. Cache::forget(RestoreBackupArchive::CHIAVE_ESITO . $user->id); activity()->causedBy($user)->log('password changed'); return redirect()->route('dashboard') ->with('success', 'Password aggiornata. Da ora accedi con quella nuova.'); } }