Sobes.tech
Junior

Popíšte mechaniku procesu prihlásenia používateľa do systému.

sobes.tech AI

Odpoveď od AI

  1. Používateľ zadáva svoje prihlasovacie údaje (používateľské meno a heslo) na prihlasovacej stránke.
  2. Prehliadač odosiela HTTP POST požiadavku na server s zadanými údajmi.
  3. Server prijíma požiadavku a odovzdáva údaje komponentu na overenie.
  4. Komponent na overenie porovnáva získané údaje s informáciami v databáze používateľov:
    • Kontroluje, či existuje používateľ s takýmto používateľským menom.
    • Hashuje zadané heslo a porovnáva ho s hashom hesla uloženým pre tohto používateľa.
  5. V prípade úspešného overenia:
    • Server vytvára reláciu pre používateľa alebo generuje prístupový token (napríklad JWT).
    • Relácia/tokén je spojená s jedinečným identifikátorom používateľa a obsahuje informácie o jeho prístupových právach.
    • Server odosiela HTTP odpoveď s kódom 200 OK a odovzdáva reláciu (cez cookie) alebo prístupový token prehliadaču.
    • Prehliadač uloží cookie alebo token.
    • Používateľ je presmerovaný na hlavnú alebo cieľovú stránku.
  6. V prípade neúspešného overenia (neplatné prihlasovacie údaje):
    • Server odosiela HTTP odpoveď s chybovým kódom (napríklad 401 Unauthorized) a chybovou správou.
    • Prehliadač zobrazí správu o chybe používateľovi na prihlasovacej stránke.
  7. Pri ďalších požiadavkách na chránené zdroje prehliadač automaticky odosiela uloženú reláciu (cookie) alebo prístupový token v hlavičkách HTTP požiadavky.
  8. Server overí platnosť relácie/tokenu a povoľuje prístup ku zdroju, ak je overenie potvrdené a používateľ má potrebné práva.

Príklad (pseudokód):

# Na serveri
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": "Invalid credentials"}

# Na klientovi (v prehliadači)
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") {
        // Server nastaví cookie s session_id, alebo môžeme uložiť token z odpovede
        window.location.href = "/dashboard";
    } else {
        alert(data.message);
    }