Junior
Popište mechaniku procesu přihlášení uživatele do systému.
sobes.tech AI
Odpověď od AI
- Uživatel zadá své přihlašovací údaje (uživatelské jméno a heslo) na přihlašovací stránce.
- Prohlížeč odešle na server HTTP POST požadavek s vloženými údaji.
- Server přijme požadavek a předá přihlašovací údaje autentifikačnímu komponentu.
- Autentifikační komponent ověří přijatá data s informacemi v databázi uživatelů:
- Zkontroluje, zda existuje uživatel s tímto uživatelským jménem.
- Zašifruje zadané heslo a porovná ho s hash hesla uloženým pro tohoto uživatele.
- V případě úspěšné autentifikace:
- Server vytvoří relaci pro uživatele nebo vygeneruje přístupový token (například JWT).
- Relace/tokent je spojena s unikátním identifikátorem uživatele a obsahuje informace o jeho právech.
- Server odešle odpověď HTTP s kódem 200 OK a přenese relaci (přes cookie) nebo token do prohlížeče uživatele.
- Prohlížeč uloží cookie nebo token.
- Uživatel je přesměrován na hlavní nebo cílovou stránku.
- V případě neúspěšné autentifikace (nesprávné uživatelské jméno nebo heslo):
- Server odešle odpověď HTTP s chybovým kódem (například 401 Unauthorized) a chybovou zprávou.
- Prohlížeč zobrazí uživateli chybovou zprávu na přihlašovací stránce.
- Při následných požadavcích na chráněné zdroje, prohlížeč automaticky odešle uloženou relaci (cookie) nebo přístupový token v hlavičkách HTTP požadavku.
- Server ověří platnost relace/tokenu a povolí přístup ke zdroji, pokud je autentifikace potvrzena a uživateli jsou přiřazena potřebná práva.
Příklad (pseudokód):
# Na serveru
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": "Neplatné přihlašovací údaje"}
# Na klientovi (v prohlížeč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, nebo můžeme uložit token z odpovědi
window.location.href = "/dashboard";
} else {
alert(data.message);
}