Sobes.tech
Junior

Aprašykite naudotojo prisijungimo proceso mechaniką sistemoje.

sobes.tech AI

Atsakymas iš AI

  1. Vartotojas įveda savo duomenis (prisijungimo vardą ir slaptažodį) prisijungimo puslapyje.
  2. Naršyklė siunčia HTTP POST užklausą serveriui su įvestais duomenimis.
  3. Serveris priima užklausą ir perduoda duomenis autentifikacijos komponentui.
  4. Autentifikacijos komponentas lygina gautus duomenis su naudotojų duomenų bazės informacija:
    • Patikrina, ar yra naudotojas su tokiu prisijungimo vardu.
    • Sukurta slaptažodžio hash ir lygina jį su saugomu hash.
  5. Sėkmingo autentifikavimo atveju:
    • Serveris sukuria naudotojo sesiją arba sugeneruoja prieigos žetoną (pvz., JWT).
    • Sesija/prieigos žetonas yra susietas su unikaliu naudotojo identifikatoriumi ir turi prieigos teises.
    • Serveris siunčia HTTP atsakymą su kodu 200 OK ir perduoda sesiją (per slapuką) arba prieigos žetoną naršyklei.
    • Naršyklė išsaugo slapuką arba žetoną.
    • Naudotojas nukreipiamas į pagrindinį arba tikslo puslapį.
  6. Nesėkmingo autentifikavimo atveju:
    • Serveris siunčia HTTP atsakymą su klaidos kodu (pvz., 401 Unauthorized) ir klaidos pranešimu.
    • Naršyklė rodo klaidos pranešimą naudotojui prisijungimo puslapyje.
  7. Sekančiuose užklausose į apsaugotus išteklius naršyklė automatiškai siunčia išsaugotą sesiją (slapuką) arba prieigos žetoną HTTP antraštėse.
  8. Serveris patikrina sesijos/žetono galiojimą ir leidžia prieigą prie ištekliaus, jei autentifikacija patvirtinta ir naudotojas turi reikiamas teises.

Pavyzdys (pseudo-kodas):

# Serveryje
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"}

# Klientas (naršyklėje)
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") {
        // Serveris nustatys slapuką su session_id arba galime išsaugoti žetoną iš atsakymo
        window.location.href = "/dashboard";
    } else {
        alert(data.message);
    }