Junior
Опишете механиката на процеса на вход на потребителя в системата.
sobes.tech AI
Отговор от AI
- Потребителят въвежда своите идентификационни данни (потребителско име и парола) на страницата за вход.
- Браузърът изпраща HTTP POST заявка към сървъра с въведените данни.
- Сървърът приема заявката и предава данните на компонента за удостоверяване.
- Компонентът за удостоверяване сравнява получените данни с информацията в базата данни за потребителите:
- Проверява дали съществува потребител с такова потребителско име.
- Хешира въведената парола и я сравнява с хеша на паролата, съхраняван за този потребител.
- В случай на успешна удостоверяване:
- Сървърът създава сесия за потребителя или генерира токен за достъп (например, JWT).
- Сесията/токенът е асоцииран с уникален идентификатор на потребителя и съдържа информация за неговите права за достъп.
- Сървърът изпраща HTTP отговор с код 200 OK и предава сесията (чрез бисквитка) или токена за достъп на браузъра.
- Браузърът запазва бисквитката или токена.
- Потребителят бива пренасочен към главната или целевата страница.
- В случай на неуспешна удостоверяване (неверен потребител или парола):
- Сървърът изпраща HTTP отговор с код за грешка (например, 401 Unauthorized) и съобщение за грешка.
- Браузърът показва съобщение за грешка на страницата за вход.
- При последващи заявки към защитени ресурси, браузърът автоматично изпраща запазената сесия (бисквитка) или токена за достъп в HTTP заглавките.
- Сървърът проверява валидността на сесията/токена и разрешава достъп до ресурса, ако удостоверяването е потвърдено и потребителят има необходимите права.
Пример (псевдокод):
# На сървъра
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"}
# На клиента (в браузъра)
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") {
// Сървърът ще установи бисквитка с session_id, или можем да запазим токена от отговора
window.location.href = "/dashboard";
} else {
alert(data.message);
}