Skip to content

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:

RedirectDescrizioneAzione
mainAccesso diretto all'appCarica settings → naviga al modulo default o /welcome
moduleAccesso a modulo specificoCarica settings → naviga al modulo indicato
companies_listSelezione azienda richiestaMostra lista aziende → utente sceglie → carica settings
confirm_loginSessione esistente da un altro dispositivoMostra conferma → utente conferma → autentica
password_changePassword scadutaMostra form cambio password
contractContratto da firmareMostra contratto
dealerPannello dealerMostra 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":

  1. Login iniziale NON autentica: authService.login() salva i loginData nello store ma NON imposta isAuthenticated: true
  2. Navigazione a confirm-login: L'utente viene reindirizzato a /confirm-login (pagina non protetta)
  3. Visualizzazione dati precedenti: La pagina mostra i dati della sessione precedente tramite GET /confirm_login
  4. Conferma login: Quando l'utente clicca "Prosegui", viene chiamato authService.confirmLoginAndAuthenticate()
  5. Autenticazione effettiva: Solo a questo punto viene chiamato POST /confirm_login e isAuthenticated viene impostato a true
  6. Navigazione finale: L'utente viene reindirizzato alla destinazione appropriata in base al nuovo redirect ricevuto
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:

  1. Controlla i settings utente per il campo default_module
  2. Se esiste un modulo di default: Reindirizza a /r/{default_module} invece che a /welcome
  3. Se non esiste: Reindirizza a /welcome (comportamento standard)

Esempi

Login con modulo di default:

API: redirect="main"
Settings: default_module="planning"
Risultato: /r/planning

Selezione azienda con modulo di default:

Utente seleziona azienda
Settings caricati: default_module="admin/dashboard"
Risultato: /r/admin%2Fdashboard

Login senza modulo di default:

API: redirect="main"
Settings: default_module=""
Risultato: /welcome

Riferimenti

Documentazione Elerama Frontend