Sobes.tech
Junior

Նկարագրեք օգտվողի մուտքի գործընթացի մեխանիկան համակարգում։

sobes.tech AI

Պատասխան AI-ից

  1. Օգտագործողը մուտքագրում է իր տվյալները (մուտքանուն և գաղտնաբառ) մուտքի էջում:
  2. Բրաուզերը ուղարկում է HTTP POST հարցում սերվերին մուտքագրված տվյալներով:
  3. Սերվերը ընդունում է հարցումը և փոխանցում տվյալները հաստատման կոմպոնենտին:
  4. Հաստատման կոմպոնենտը համեմատում է ստացված տվյալները օգտվողների տվյալների բազայի հետ՝
    • Ստուգում, արդյոք կա այդ մուտքանունով օգտվող:
    • Հաշվարկում է մուտքագրված գաղտնաբառի հեշը և համեմատում այն տվյալների բազքում պահվող հեշի հետ:
  5. Ուղղակի հաստատման դեպքում՝
    • Սերվերը ստեղծում է սեսիա կամ գեներացնում մուտքի տոքեն (օր., JWT):
    • Սեսիան/տոքենը կապված է օգտագործողի եզակի նույնականացուցիչի հետ և պարունակում է նրա իրավունքների մասին տեղեկություններ:
    • Սերվերը ուղարկում է HTTP պատասխան՝ 200 OK կոդով և փոխանցում սեսիան (cookie-ի միջոցով) կամ մուտքի տոքենը՝ օգտագործողի բրաուզերին:
    • Բրաուզերը պահպանում է cookie-ն կամ տոքենը:
    • Օգտագործողը ուղղորդվում է գլխավոր կամ նպատակային էջ:
  6. Անհաջող հաստատման դեպքում՝
    • Սերվերը ուղարկում է HTTP պատասխան՝ սխալի կոդով (օր., 401 Unauthorized) և սխալի հաղորդագրությամբ:
    • Բրաուզերը ցուցադրում է սխալի հաղորդագրությունը մուտքի էջում:
  7. Հաջորդ հարցումների ժամանակ՝
    • Բրաուզերը ավտոմատ կերպով ուղարկում է պահած սեսիան (cookie) կամ մուտքի տոքենը 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") {
        // Սերվերը կտեղադրի cookie՝ session_id, կամ կարող ենք պահել տոքենը պատասխանից
        window.location.href = "/dashboard";
    } else {
        alert(data.message);
    }