Sobes.tech
Junior

Describe la mecánica del proceso de inicio de sesión del usuario en el sistema.

sobes.tech AI

Respuesta de la IA

  1. El usuario ingresa sus credenciales (nombre de usuario y contraseña) en la página de inicio de sesión.
  2. El navegador envía una solicitud HTTP POST al servidor con los datos ingresados.
  3. El servidor recibe la solicitud y pasa las credenciales al componente de autenticación.
  4. El componente de autenticación verifica los datos recibidos con la información en la base de datos de usuarios:
    • Verifica si existe un usuario con ese nombre de usuario.
    • Hashea la contraseña ingresada y la compara con el hash de la contraseña almacenada para ese usuario.
  5. En caso de autenticación exitosa:
    • El servidor crea una sesión para el usuario o genera un token de acceso (por ejemplo, JWT).
    • La sesión/token se asocia con un identificador único del usuario y contiene información sobre sus permisos de acceso.
    • El servidor envía una respuesta HTTP con código 200 OK y transmite la sesión (a través de cookie) o el token de acceso al navegador del usuario.
    • El navegador guarda la cookie o el token.
    • El usuario es redirigido a la página principal o a la página objetivo.
  6. En caso de autenticación fallida (nombre de usuario o contraseña incorrectos):
    • El servidor envía una respuesta HTTP con un código de error (por ejemplo, 401 Unauthorized) y un mensaje de error.
    • El navegador muestra un mensaje de error al usuario en la página de inicio de sesión.
  7. En solicitudes posteriores a recursos protegidos, el navegador envía automáticamente la sesión guardada (cookie) o el token de acceso en los encabezados de la solicitud HTTP.
  8. El servidor verifica la validez de la sesión/token y permite el acceso al recurso si la autenticación está confirmada y el usuario tiene los permisos necesarios.

Ejemplo (pseudocódigo):

# En el servidor
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": "Credenciales inválidas"}

# En el cliente (en el navegador)
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") {
        // El servidor establecerá una cookie con session_id, o podemos guardar el token de la respuesta
        window.location.href = "/dashboard";
    } else {
        alert(data.message);
    }