Sobes.tech
Junior

Опишите механику процеса пријаве корисника у систему.

sobes.tech АИ

Одговор од АИ

  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);
    }