Flusso di Autenticazione
Diagramma e spiegazione dettagliata del flusso di login.
Diagramma
Tipi di Redirect
Dopo il login, l'API restituisce un redirect che determina il flusso successivo:
| Redirect | Descrizione | Azione |
|---|---|---|
main | Accesso diretto all'app | Carica settings → naviga al modulo default o /welcome |
module | Accesso a modulo specifico | Carica settings → naviga al modulo indicato |
companies_list | Selezione azienda richiesta | Mostra lista aziende → utente sceglie → carica settings |
confirm_login | Sessione esistente da un altro dispositivo | Mostra conferma → utente conferma → autentica |
password_change | Password scaduta | Mostra form cambio password |
contract | Contratto da firmare | Mostra contratto |
dealer | Pannello dealer | Mostra pannello dealer |
Flusso Dettagliato
1. Login Standard (main/module)
typescript
// 1. Login
const response = await authService.login(username, password);
// 2. Redirect type è "main" o "module"
if (response.data.redirect === "main" || response.data.redirect === "module") {
// 3. Carica settings
const settings = await getUserSettings();
// 4. Naviga al modulo default o /welcome
const path = authService.getRedirectPath(response.data.redirect, response.data.module);
navigate(path);
}2. Selezione Azienda (companies_list)
typescript
// 1. Login restituisce companies_list
const response = await authService.login(username, password);
// 2. Mostra lista aziende
const companies = await getCompaniesList();
// 3. Utente sceglie un'azienda
await setActiveCompany({ id: selectedId });
// 4. Carica settings
const settings = await getUserSettings();
// 5. Naviga all'app
navigate("/welcome");3. Conferma Login (confirm_login)
Quando l'API restituisce redirect: "confirm_login":
- Login iniziale NON autentica:
authService.login()salva iloginDatanello store ma NON impostaisAuthenticated: true - Navigazione a confirm-login: L'utente viene reindirizzato a
/confirm-login(pagina non protetta) - Visualizzazione dati precedenti: La pagina mostra i dati della sessione precedente tramite
GET /confirm_login - Conferma login: Quando l'utente clicca "Prosegui", viene chiamato
authService.confirmLoginAndAuthenticate() - Autenticazione effettiva: Solo a questo punto viene chiamato
POST /confirm_logineisAuthenticatedviene impostato atrue - Navigazione finale: L'utente viene reindirizzato alla destinazione appropriata in base al nuovo
redirectricevuto
typescript
// 1. Login restituisce confirm_login
const response = await authService.login(username, password);
// isAuthenticated è ANCORA false!
// 2. Naviga a /confirm-login
navigate("/confirm-login");
// 3. In /confirm-login, mostra dati sessione precedente
const data = await getConfirmLoginData();
// Mostra: browser, piattaforma, IP, data ultimo accesso
// 4. Utente clicca "Prosegui"
await authService.confirmLoginAndAuthenticate();
// ORA isAuthenticated diventa true
// 5. Naviga alla destinazione finale
navigate(finalPath);Questo garantisce che l'utente non sia considerato autenticato fino a quando non conferma esplicitamente la sovrascrittura della sessione esistente.
Modulo di Default
Quando l'API restituisce redirect: "main", il sistema:
- Controlla i settings utente per il campo
default_module - Se esiste un modulo di default: Reindirizza a
/r/{default_module}invece che a/welcome - Se non esiste: Reindirizza a
/welcome(comportamento standard)
Esempi
Login con modulo di default:
API: redirect="main"
Settings: default_module="planning"
Risultato: /r/planningSelezione azienda con modulo di default:
Utente seleziona azienda
Settings caricati: default_module="admin/dashboard"
Risultato: /r/admin%2FdashboardLogin senza modulo di default:
API: redirect="main"
Settings: default_module=""
Risultato: /welcomeRiferimenti
- Guida Rapida - Come proteggere le route
- Esempi - Implementazioni complete
- API Reference - Funzioni API disponibili