Junior
Popíšte mechaniku procesu prihlásenia používateľa do systému.
sobes.tech AI
Odpoveď od AI
- Používateľ zadáva svoje prihlasovacie údaje (používateľské meno a heslo) na prihlasovacej stránke.
- Prehliadač odosiela HTTP POST požiadavku na server s zadanými údajmi.
- Server prijíma požiadavku a odovzdáva údaje komponentu na overenie.
- Komponent na overenie porovnáva získané údaje s informáciami v databáze používateľov:
- Kontroluje, či existuje používateľ s takýmto používateľským menom.
- Hashuje zadané heslo a porovnáva ho s hashom hesla uloženým pre tohto používateľa.
- V prípade úspešného overenia:
- Server vytvára reláciu pre používateľa alebo generuje prístupový token (napríklad JWT).
- Relácia/tokén je spojená s jedinečným identifikátorom používateľa a obsahuje informácie o jeho prístupových právach.
- Server odosiela HTTP odpoveď s kódom 200 OK a odovzdáva reláciu (cez cookie) alebo prístupový token prehliadaču.
- Prehliadač uloží cookie alebo token.
- Používateľ je presmerovaný na hlavnú alebo cieľovú stránku.
- V prípade neúspešného overenia (neplatné prihlasovacie údaje):
- Server odosiela HTTP odpoveď s chybovým kódom (napríklad 401 Unauthorized) a chybovou správou.
- Prehliadač zobrazí správu o chybe používateľovi na prihlasovacej stránke.
- Pri ďalších požiadavkách na chránené zdroje prehliadač automaticky odosiela uloženú reláciu (cookie) alebo prístupový token v hlavičkách HTTP požiadavky.
- Server overí platnosť relácie/tokenu a povoľuje prístup ku zdroju, ak je overenie potvrdené a používateľ má potrebné práva.
Príklad (pseudokód):
# Na serveri
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"}
# Na klientovi (v prehliadači)
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 nastaví cookie s session_id, alebo môžeme uložiť token z odpovede
window.location.href = "/dashboard";
} else {
alert(data.message);
}