Sobes.tech
Junior

Aprakstiet lietotāja pieteikšanās procesa mehāniku sistēmā.

sobes.tech AI

Atbilde no AI

  1. Lietotājs ievada savus akreditācijas datus (lietotājvārdu un paroli) pieslēgšanās lapā.
  2. Pārlūkprogramma nosūta HTTP POST pieprasījumu serverim ar ievadītajiem datiem.
  3. Servers pieņem pieprasījumu un nodod datus autentifikācijas komponentam.
  4. Autentifikācijas komponenta salīdzina saņemtos datus ar lietotāju datu bāzes informāciju:
    • Pārbauda, vai ir lietotājs ar tādu pašu lietotājvārdu.
    • Hashē ievadīto paroli un salīdzina to ar saglabāto paroli hash.
  5. Gadījumā, ja autentifikācija ir veiksmīga:
    • Servers izveido sesiju lietotājam vai ģenerē piekļuves žetonu (piemēram, JWT).
    • Sesija/piekļuves žetons ir saistīts ar unikālu lietotāja identifikatoru un satur informāciju par piekļuves tiesībām.
    • Servers nosūta HTTP atbildi ar kodu 200 OK un nodod sesiju (caur sīkfailu) vai piekļuves žetonu pārlūkprogrammai.
    • Pārlūkprogramma saglabā sīkfailu vai žetonu.
    • Lietotājs tiek novirzīts uz galveno vai mērķa lapu.
  6. Neveiksmīgas autentifikācijas gadījumā:
    • Servers nosūta HTTP atbildi ar kļūdas kodu (piemēram, 401 Unauthorized) un kļūdas ziņojumu.
    • Pārlūkprogramma parāda kļūdas ziņojumu lietotājam pieslēgšanās lapā.
  7. Nākamajās pieprasījumos uz aizsargātajiem resursiem pārlūkprogramma automātiski nosūta saglabāto sesiju (sīkfailu) vai piekļuves žetonu HTTP galvās.
  8. Servers pārbauda sesijas/žetona derīgumu un ļauj piekļuvi resursam, ja autentifikācija ir apstiprināta un lietotājam ir nepieciešamās tiesības.

Piemērs (pseido-kods):

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

# Klienta pusē (pārlūkprogrammā)
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 iestatīs sīkfailu ar session_id vai varam saglabāt žetonu no atbildes
        window.location.href = "/dashboard";
    } else {
        alert(data.message);
    }