Sobes.tech
Junior

Механикаи раванди воридшавии корбар дар системро тавсиф диҳед.

sobes.tech AI

Ҷавоб аз AI

  1. Истифодабаранда маълумотҳои корбар (номи корбар ва парол) дар саҳифаи воридшавӣ.
  2. Браузер HTTP POST-захираро ба сервер бо маълумотҳои воридшуда мефиристад.
  3. Сервер талабро қабул мекунад ва маълумотҳоро ба компоненти тасдиқот мефиристад.
  4. Компоненти тасдиқот маълумотро бо маълумоти дар базаи додаҳои корбарон ёфтанӣ муқоиса мекунад:
    • Санҷед, ки оё корбар бо чунин номи корбар вуҷуд дорад.
    • Паролро ҳеш мекунад ва онро бо ҳеши парол, ки барои ин корбар нигоҳ дошта шудааст, муқоиса мекунад.
  5. Дар ҳолати тасдиқи муваффақ:
    • Сервер сессия барои корбар месозад ё токени дастрасӣ (масалан, JWT) мебарорад.
    • Сессия/токен бо идентификатори беназири корбар пайваст мешавад ва маълумот дар бораи ҳуқуқҳои дастрасии ӯ дорад.
    • Сервер ҷавобро бо коди 200 OK мефиристад ва сессия (бо истифода аз куки) ё токени дастрасӣ ба браузер медиҳад.
    • Браузер куки ё токенро нигоҳ медорад.
    • Корбар ба саҳифаи асосӣ ё мақсадноки худ равона мешавад.
  6. Дар ҳолати номуваффақият (номи корбар ё пароли нодуруст):
    • Сервер ҷавобро бо коди хато (масалан, 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);
    }