Sobes.tech
Junior

Opisz mechanikę procesu logowania użytkownika w systemie.

sobes.tech AI

Odpowiedź od AI

  1. Użytkownik wprowadza dane uwierzytelniające (login i hasło) na stronie logowania.
  2. Przeglądarka wysyła żądanie HTTP POST do serwera z wprowadzonymi danymi.
  3. Serwer odbiera żądanie i przekazuje dane uwierzytelniające do komponentu uwierzytelniania.
  4. Komponent uwierzytelniania weryfikuje otrzymane dane z informacjami w bazie danych użytkowników:
    • Sprawdza, czy istnieje użytkownik z takim loginem.
    • Hashuje wprowadzone hasło i porównuje je z hashem hasła przechowywanym dla tego użytkownika.
  5. W przypadku pomyślnej autoryzacji:
    • Serwer tworzy sesję dla użytkownika lub generuje token dostępu (np. JWT).
    • Sesja/token jest powiązany z unikalnym identyfikatorem użytkownika i zawiera informacje o jego uprawnieniach.
    • Serwer wysyła odpowiedź HTTP z kodem 200 OK i przekazuje sesję (przez cookie) lub token dostępu do przeglądarki użytkownika.
    • Przeglądarka zapisuje cookie lub token.
    • Użytkownik jest przekierowywany na stronę główną lub docelową.
  6. W przypadku niepowodzenia autoryzacji (niepoprawny login lub hasło):
    • Serwer wysyła odpowiedź HTTP z kodem błędu (np. 401 Unauthorized) i komunikatem o błędzie.
    • Przeglądarka wyświetla komunikat o błędzie użytkownikowi na stronie logowania.
  7. Przy kolejnych żądaniach do chronionych zasobów, przeglądarka automatycznie wysyła zapisane sesje (cookie) lub token dostępu w nagłówkach żądania HTTP.
  8. Serwer sprawdza ważność sesji/tokena i zezwala na dostęp do zasobu, jeśli uwierzytelnianie zostało potwierdzone i użytkownik ma odpowiednie uprawnienia.

Przykład (pseudokod):

# Na serwerze
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": "Nieprawidłowe dane uwierzytelniające"}

# Na kliencie (w przeglądarce)
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") {
        // Serwer ustawi cookie z session_id, lub możemy zapisać token z odpowiedzi
        window.location.href = "/dashboard";
    } else {
        alert(data.message);
    }