Junior
Kirjeldage kasutaja sisselogimisprotsessi mehhanismi süsteemis.
sobes.tech AI
Vastus AI-lt
- Kasutaja sisestab oma andmed (kasutajanimi ja parool) sisselogimislehel.
- Brauser saadab HTTP POST-päringu serverile sisestatud andmetega.
- Server võtab päringu vastu ja edastab andmed autentimiskomponendile.
- Autentimiskomponent võrdleb saadud andmeid kasutajate andmebaasis olevate andmetega:
- Kontrollib, kas sellise kasutajanimega kasutaja eksisteerib.
- Hashib sisestatud parooli ja võrdleb seda salvestatud paroolihashiga.
- 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.
- Ebaõnnestunud autentimise korral:
- Server saadab HTTP-vastuse veakoodiga (nt 401 Unauthorized) ja veateate.
- Brauser kuvab veateate kasutajale sisselogimislehel.
- Järgmistes päringutes kaitstud ressurssidele saadab brauser automaatselt salvestatud sessiooni (küpsise) või juurdepääsutokeni HTTP-päringu päistes.
- 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);
}