Sobes.tech
Junior

Descrie mecanica procesului de autentificare a utilizatorului în sistem.

sobes.tech AI

Răspuns de la AI

  1. Utilizatorul introduce datele de autentificare (nume de utilizator și parolă) pe pagina de autentificare.
  2. Browserul trimite o solicitare HTTP POST către server cu datele introduse.
  3. Serverul primește solicitarea și transmite datele de autentificare către componenta de autentificare.
  4. Componentei de autentificare verifică datele primite cu informațiile din baza de date a utilizatorilor:
    • Verifică dacă există un utilizator cu acel nume de utilizator.
    • Hash-ează parola introdusă și o compară cu hash-ul parolei stocate pentru acel utilizator.
  5. În cazul autentificării reușite:
    • Serverul creează o sesiune pentru utilizator sau generează un token de acces (de exemplu, JWT).
    • Sesiunea/tokenul este asociat cu un identificator unic al utilizatorului și conține informații despre drepturile sale de acces.
    • Serverul trimite un răspuns HTTP cu codul 200 OK și transmite sesiunea (prin cookie) sau tokenul de acces către browserul utilizatorului.
    • Browserul salvează cookie-ul sau tokenul.
    • Utilizatorul este redirecționat către pagina principală sau pagina țintă.
  6. În cazul eșecului autentificării (nume de utilizator sau parolă incorecte):
    • Serverul trimite un răspuns HTTP cu un cod de eroare (de exemplu, 401 Unauthorized) și un mesaj de eroare.
    • Browserul afișează un mesaj de eroare utilizatorului pe pagina de autentificare.
  7. În solicitările ulterioare către resurse protejate, browserul trimite automat sesiunea salvată (cookie) sau tokenul de acces în anteturile solicitării HTTP.
  8. Serverul verifică validitatea sesiunii/tokenului și permite accesul la resursă dacă autentificarea este confirmată și utilizatorul are drepturile necesare.

Exemplu (pseudo-cod):

# Pe 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": "Credențiale invalide"}

# Pe client (în 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") {
        // Serverul va seta un cookie cu session_id, sau putem salva tokenul din răspuns
        window.location.href = "/dashboard";
    } else {
        alert(data.message);
    }