Sobes.tech
Junior

Опишете механиката на процеса на вход на потребителя в системата.

sobes.tech AI

Отговор от AI

  1. Потребителят въвежда своите идентификационни данни (потребителско име и парола) на страницата за вход.
  2. Браузърът изпраща HTTP POST заявка към сървъра с въведените данни.
  3. Сървърът приема заявката и предава данните на компонента за удостоверяване.
  4. Компонентът за удостоверяване сравнява получените данни с информацията в базата данни за потребителите:
    • Проверява дали съществува потребител с такова потребителско име.
    • Хешира въведената парола и я сравнява с хеша на паролата, съхраняван за този потребител.
  5. В случай на успешна удостоверяване:
    • Сървърът създава сесия за потребителя или генерира токен за достъп (например, JWT).
    • Сесията/токенът е асоцииран с уникален идентификатор на потребителя и съдържа информация за неговите права за достъп.
    • Сървърът изпраща HTTP отговор с код 200 OK и предава сесията (чрез бисквитка) или токена за достъп на браузъра.
    • Браузърът запазва бисквитката или токена.
    • Потребителят бива пренасочен към главната или целевата страница.
  6. В случай на неуспешна удостоверяване (неверен потребител или парола):
    • Сървърът изпраща HTTP отговор с код за грешка (например, 401 Unauthorized) и съобщение за грешка.
    • Браузърът показва съобщение за грешка на страницата за вход.
  7. При последващи заявки към защитени ресурси, браузърът автоматично изпраща запазената сесия (бисквитка) или токена за достъп в HTTP заглавките.
  8. Сървърът проверява валидността на сесията/токена и разрешава достъп до ресурса, ако удостоверяването е потвърдено и потребителят има необходимите права.

Пример (псевдокод):

# На сървъра
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);
    }