Junior
Aprašykite naudotojo prisijungimo proceso mechaniką sistemoje.
sobes.tech AI
Atsakymas iš AI
- Vartotojas įveda savo duomenis (prisijungimo vardą ir slaptažodį) prisijungimo puslapyje.
- Naršyklė siunčia HTTP POST užklausą serveriui su įvestais duomenimis.
- Serveris priima užklausą ir perduoda duomenis autentifikacijos komponentui.
- 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.
- 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į.
- 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.
- Sekančiuose užklausose į apsaugotus išteklius naršyklė automatiškai siunčia išsaugotą sesiją (slapuką) arba prieigos žetoną HTTP antraštėse.
- 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);
}