Sobes.tech
Junior

Décrivez la mécanique du processus de connexion de l'utilisateur dans le système.

sobes.tech IA

Réponse de l'IA

  1. L'utilisateur saisit ses identifiants (nom d'utilisateur et mot de passe) sur la page de connexion.
  2. Le navigateur envoie une requête HTTP POST au serveur avec les données saisies.
  3. Le serveur reçoit la requête et transmet les identifiants au composant d'authentification.
  4. Le composant d'authentification vérifie les données reçues avec les informations dans la base de données des utilisateurs :
    • Vérifie si un utilisateur avec ce nom d'utilisateur existe.
    • Hash le mot de passe saisi et le compare avec le hash du mot de passe stocké pour cet utilisateur.
  5. En cas de succès de l'authentification :
    • Le serveur crée une session pour l'utilisateur ou génère un jeton d'accès (par exemple, JWT).
    • La session/le jeton est associé à un identifiant unique de l'utilisateur et contient des informations sur ses droits d'accès.
    • Le serveur envoie une réponse HTTP avec le code 200 OK et transmet la session (via cookie) ou le jeton d'accès au navigateur de l'utilisateur.
    • Le navigateur enregistre le cookie ou le jeton.
    • L'utilisateur est redirigé vers la page d'accueil ou la page cible.
  6. En cas d'échec de l'authentification (nom d'utilisateur ou mot de passe incorrect) :
    • Le serveur envoie une réponse HTTP avec un code d'erreur (par exemple, 401 Unauthorized) et un message d'erreur.
    • Le navigateur affiche un message d'erreur à l'utilisateur sur la page de connexion.
  7. Lors des requêtes ultérieures aux ressources protégées, le navigateur envoie automatiquement la session sauvegardée (cookie) ou le jeton d'accès dans les en-têtes de la requête HTTP.
  8. Le serveur vérifie la validité de la session/du jeton et autorise l'accès à la ressource si l'authentification est confirmée et si l'utilisateur dispose des droits nécessaires.

Exemple (pseudocode) :

# Sur le serveur
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": "Identifiants invalides"}

# Sur le client (dans le navigateur)
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") {
        // Le serveur établira un cookie avec session_id, ou nous pouvons enregistrer le jeton de la réponse
        window.location.href = "/dashboard";
    } else {
        alert(data.message);
    }