Sobes.tech
Junior

Beschrijf de mechaniek van het inlogproces van de gebruiker in het systeem.

sobes.tech AI

Antwoord van AI

  1. De gebruiker voert zijn inloggegevens (gebruikersnaam en wachtwoord) in op de inlogpagina.
  2. De browser stuurt een HTTP POST-verzoek naar de server met de ingevoerde gegevens.
  3. De server ontvangt het verzoek en geeft de inloggegevens door aan de authenticatiecomponent.
  4. De authenticatiecomponent verifieert de ontvangen gegevens met de informatie in de gebruikersdatabase:
    • Controleert of er een gebruiker bestaat met die gebruikersnaam.
    • Hash het ingevoerde wachtwoord en vergelijkt het met de hash van het wachtwoord dat voor die gebruiker is opgeslagen.
  5. Bij succesvolle authenticatie:
    • De server maakt een sessie voor de gebruiker aan of genereert een toegangstoken (bijvoorbeeld JWT).
    • De sessie/het token wordt gekoppeld aan een unieke gebruikersidentificatie en bevat informatie over de toegangsrechten.
    • De server stuurt een HTTP-antwoorp met code 200 OK en verzendt de sessie (via cookie) of het toegangstoken naar de browser van de gebruiker.
    • De browser slaat de cookie of het token op.
    • De gebruiker wordt doorgestuurd naar de hoofdpagina of de doelpagina.
  6. Bij mislukte authenticatie (onjuist login of wachtwoord):
    • De server stuurt een HTTP-antwoorp met een foutcode (bijvoorbeeld 401 Unauthorized) en een foutmelding.
    • De browser toont een foutmelding aan de gebruiker op de inlogpagina.
  7. Bij volgende verzoeken naar beveiligde bronnen stuurt de browser automatisch de opgeslagen sessie (cookie) of het toegangstoken in de HTTP-headers.
  8. De server controleert de geldigheid van de sessie/het token en staat toegang toe tot de bron als de authenticatie is bevestigd en de gebruiker de benodigde rechten heeft.

Voorbeeld (pseudocode):

# Op de 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": "Ongeldige inloggegevens"}

# Aan de client (in de 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") {
        // De server zal een cookie met session_id instellen, of we kunnen de token uit de reactie opslaan
        window.location.href = "/dashboard";
    } else {
        alert(data.message);
    }