Sobes.tech
Junior

Popište mechaniku procesu přihlášení uživatele do systému.

sobes.tech AI

Odpověď od AI

  1. Uživatel zadá své přihlašovací údaje (uživatelské jméno a heslo) na přihlašovací stránce.
  2. Prohlížeč odešle na server HTTP POST požadavek s vloženými údaji.
  3. Server přijme požadavek a předá přihlašovací údaje autentifikačnímu komponentu.
  4. Autentifikační komponent ověří přijatá data s informacemi v databázi uživatelů:
    • Zkontroluje, zda existuje uživatel s tímto uživatelským jménem.
    • Zašifruje zadané heslo a porovná ho s hash hesla uloženým pro tohoto uživatele.
  5. V případě úspěšné autentifikace:
    • Server vytvoří relaci pro uživatele nebo vygeneruje přístupový token (například JWT).
    • Relace/tokent je spojena s unikátním identifikátorem uživatele a obsahuje informace o jeho právech.
    • Server odešle odpověď HTTP s kódem 200 OK a přenese relaci (přes cookie) nebo token do prohlížeče uživatele.
    • Prohlížeč uloží cookie nebo token.
    • Uživatel je přesměrován na hlavní nebo cílovou stránku.
  6. V případě neúspěšné autentifikace (nesprávné uživatelské jméno nebo heslo):
    • Server odešle odpověď HTTP s chybovým kódem (například 401 Unauthorized) a chybovou zprávou.
    • Prohlížeč zobrazí uživateli chybovou zprávu na přihlašovací stránce.
  7. Při následných požadavcích na chráněné zdroje, prohlížeč automaticky odešle uloženou relaci (cookie) nebo přístupový token v hlavičkách HTTP požadavku.
  8. Server ověří platnost relace/tokenu a povolí přístup ke zdroji, pokud je autentifikace potvrzena a uživateli jsou přiřazena potřebná práva.

Příklad (pseudokód):

# Na serveru
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": "Neplatné přihlašovací údaje"}

# Na klientovi (v prohlížeč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, nebo můžeme uložit token z odpovědi
        window.location.href = "/dashboard";
    } else {
        alert(data.message);
    }