Sobes.tech
Junior

Descrivi la meccanica del processo di login dell'utente nel sistema.

sobes.tech AI

Risposta dell'AI

  1. L'utente inserisce le proprie credenziali (nome utente e password) nella pagina di login.
  2. Il browser invia una richiesta HTTP POST al server con i dati inseriti.
  3. Il server riceve la richiesta e la passa al componente di autenticazione.
  4. Il componente di autenticazione verifica i dati ricevuti con le informazioni nel database degli utenti:
    • Controlla se esiste un utente con quel nome utente.
    • Hasha la password inserita e la confronta con l'hash della password memorizzata per quell'utente.
  5. In caso di autenticazione riuscita:
    • Il server crea una sessione per l'utente o genera un token di accesso (ad esempio, JWT).
    • La sessione/o il token viene associato a un identificatore unico dell'utente e contiene informazioni sui suoi diritti di accesso.
    • Il server invia una risposta HTTP con codice 200 OK e trasmette la sessione (tramite cookie) o il token di accesso al browser dell'utente.
    • Il browser salva il cookie o il token.
    • L'utente viene reindirizzato alla pagina principale o alla pagina di destinazione.
  6. In caso di fallimento dell'autenticazione (nome utente o password errati):
    • Il server invia una risposta HTTP con un codice di errore (ad esempio, 401 Unauthorized) e un messaggio di errore.
    • Il browser mostra un messaggio di errore all'utente sulla pagina di login.
  7. In richieste successive a risorse protette, il browser invia automaticamente la sessione salvata (cookie) o il token di accesso nelle intestazioni della richiesta HTTP.
  8. Il server verifica la validità della sessione/del token e permette l'accesso alla risorsa se l'autenticazione è confermata e l'utente ha i diritti necessari.

Esempio (pseudocodice):

# Sul server
def login(username, password):
    user = database.find_user(username)
    if user and hash(password) == user.hashed_password:
        session_id = generate_session_id(user.id)
        database.save_session(session_id, user.id)
        return {"status": "success", "session_id": session_id}
    else:
        return {"status": "fail", "message": "Credenziali non valide"}

# Sul client (nel browser)
async function handle_login_submit(event):
    event.preventDefault();
    const username = document.getElementById("username").value;
    const password = document.getElementById("password").value;

    const response = await fetch("/api/login", {
        method: "POST",
        headers: {
            "Content-Type": "application/json"
        },
        body: JSON.stringify({ username, password })
    });

    const data = await response.json();
    if (data.status === "success") {
        // Il server imposterà un cookie con session_id, o possiamo salvare il token dalla risposta
        window.location.href = "/dashboard";
    } else {
        alert(data.message);
    }