Sobes.tech
Junior

Sistemde kullanıcının giriş sürecinin mekanizmasını açıklayın.

sobes.tech yapay zeka

AI'dan gelen yanıt

  1. Kullanıcı giriş sayfasında kullanıcı adı ve şifre bilgilerini girer.
  2. Tarayıcı, girilen verilerle sunucuya HTTP POST isteği gönderir.
  3. Sunucu, isteği alır ve kimlik doğrulama bileşimine iletir.
  4. Kimlik doğrulama bileşeni, alınan verileri kullanıcı veritabanındaki bilgilerle karşılaştırır:
    • Bu kullanıcı adıyla bir kullanıcının olup olmadığını kontrol eder.
    • Girilen şifreyi hash'ler ve bu hash'i, bu kullanıcı için saklanan şifre hash'iyle karşılaştırır.
  5. Başarılı kimlik doğrulama durumunda:
    • Sunucu, kullanıcı için bir oturum oluşturur veya erişim token'ı (örneğin JWT) üretir.
    • Oturum/token, kullanıcının benzersiz kimliğiyle ilişkilendirilir ve erişim hakları hakkında bilgi içerir.
    • Sunucu, HTTP yanıtı ile 200 OK kodunu gönderir ve oturumu (cookie aracılığıyla) veya erişim token'ını kullanıcının tarayıcısına iletir.
    • Tarayıcı, cookie veya token'ı saklar.
    • Kullanıcı ana sayfaya veya hedef sayfaya yönlendirilir.
  6. Başarısız kimlik doğrulama durumunda (yanlış kullanıcı adı veya şifre):
    • Sunucu, hata kodu ile HTTP yanıtı gönderir (örneğin, 401 Unauthorized) ve hata mesajı iletir.
    • Tarayıcı, giriş sayfasında kullanıcıya hata mesajı gösterir.
  7. Güvenli kaynaklara sonraki isteklerde, tarayıcı otomatik olarak saklanan oturumu (cookie) veya erişim token'ını HTTP isteği başlıklarında gönderir.
  8. Sunucu, oturum/token'ın geçerliliğini kontrol eder ve kimlik doğrulama onaylandıysa ve kullanıcının gerekli hakları varsa, kaynağa erişimi izin verir.

Örnek (sözde kod):

# Sunucuda
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": "Geçersiz kimlik bilgileri"}

# İstemci tarafında (tarayıcıda)
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") {
        // Sunucu, session_id ile bir cookie ayarlayacak veya yanıtın token'ını saklayabiliriz
        window.location.href = "/dashboard";
    } else {
        alert(data.message);
    }