Sobes.tech
Junior

Kirjeldage kasutaja sisselogimisprotsessi mehhanismi süsteemis.

sobes.tech AI

Vastus AI-lt

  1. Kasutaja sisestab oma andmed (kasutajanimi ja parool) sisselogimislehel.
  2. Brauser saadab HTTP POST-päringu serverile sisestatud andmetega.
  3. Server võtab päringu vastu ja edastab andmed autentimiskomponendile.
  4. Autentimiskomponent võrdleb saadud andmeid kasutajate andmebaasis olevate andmetega:
    • Kontrollib, kas sellise kasutajanimega kasutaja eksisteerib.
    • Hashib sisestatud parooli ja võrdleb seda salvestatud paroolihashiga.
  5. Eduka autentimise korral:
    • Server loob kasutajale sessiooni või genereerib juurdepääsutokeni (nt JWT).
    • Sessioon/token on seotud kasutaja unikaalse identifikaatoriga ja sisaldab teavet tema juurdepääsuõiguste kohta.
    • Server saadab HTTP-vastuse koodiga 200 OK ja edastab sessiooni (küpsise kaudu) või juurdepääsutokeni brauserile.
    • Brauser salvestab küpsise või tokeni.
    • Kasutaja suunatakse põhilehele või sihtlehele.
  6. Ebaõnnestunud autentimise korral:
    • Server saadab HTTP-vastuse veakoodiga (nt 401 Unauthorized) ja veateate.
    • Brauser kuvab veateate kasutajale sisselogimislehel.
  7. Järgmistes päringutes kaitstud ressurssidele saadab brauser automaatselt salvestatud sessiooni (küpsise) või juurdepääsutokeni HTTP-päringu päistes.
  8. Server kontrollib sessiooni/tokeni kehtivust ja lubab juurdepääsu ressursile, kui autentimine on kinnitatud ja kasutajal on vajalikud õigused.

Näide (pseudokood):

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

# Klient (brauseris)
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 määrab cookie koos session_id või saame salvestada tokeni vastusest
        window.location.href = "/dashboard";
    } else {
        alert(data.message);
    }