3E e 3I Sia: Sistema di login semplificato che include un CAPTCHA testuale

  Sistema di login semplificato che include un CAPTCHA testuale



1. Obiettivo dell'Esercizio

Imparare a gestire i moduli (form), confrontare stringhe di testo e utilizzare le funzioni JavaScript per generare codici casuali.

Suggerimenti per l'accessibilità DSA:

Font Leggibile: Useremo un font senza grazie (sans-serif).

Colori: Contrasto elevato tra testo e sfondo.

Codice Commentato: Spiegazioni brevi e dirette.

 2. La Struttura HTML (`index.html`)

Questa pagina contiene il modulo di accesso. Abbiamo aggiunto un'area dedicata al CAPTCHA che cambia ogni volta che la pagina viene caricata.

<!DOCTYPE html>

<html lang="it">

<head>

    <meta charset="UTF-8">

    <title>Login Accessibile</title>

    <link rel="stylesheet" href="style.css">

</head>

<body>

    <div class="login-container">

        <h1>Accedi al Portale</h1>

            <form id="loginForm">

            <label for="username">Nome Utente:</label>

            <input type="text" id="username" placeholder="Inserisci il tuo nome" required>

            <label for="password">Password:</label>

            <input type="password" id="password" placeholder="Inserisci la password" required>

            <div class="captcha-box">

                <p>Copia questo codice:</p>

                <span id="captcha-code"></span>

                <button type="button" onclick="generaCaptcha()" class="btn-refresh">🔄 Cambia</button>

            </div>

            <input type="text" id="captcha-input" placeholder="Scrivi qui il codice" required>

            <button type="submit" class="btn-login">Entra</button>

        </form>

        <p id="messaggio-errore" style="color: red;"></p>

    </div>

    <script src="script.js"></script>

</body>

</html>

3. Il Motore JavaScript (`script.js`)

Qui gestiamo la logica: generare il codice, verificare se i dati sono corretti e "reindirizzare" l'utente.

 1. Credenziali di prova

const USER_CORRETTO = "classe3ISia";

const PASS_CORRETTA = "itebassi2026";

// 2. Funzione per creare il codice CAPTCHA

function generaCaptcha() {

    // Usiamo solo lettere e numeri facili da leggere (niente 0 o O)

    const caratteri = "abcdefghjkmnopqrstuvwyzABCDEFGHJKLMNPQRSTUVWXYZ23456789"; 

    let codiceGenerato = "";

        // Ciclo per scegliere 5 caratteri a caso

    for (let i = 0; i < 5; i++) {

        const indice = Math.floor(Math.random() * caratteri.length);

        codiceGenerato += caratteri.charAt(indice);

    }

        // Scriviamo il codice nel quadratino della pagina HTML

    document.getElementById("captcha-code").innerText = codiceGenerato;

}

// 3. Controllo del Modulo quando l'utente clicca "Entra"

document.getElementById("loginForm").addEventListener("submit", function(event) {

    // Blocchiamo l'invio automatico per controllare i dati con JS

    event.preventDefault();

    // Prendiamo quello che l'utente ha scritto nei campi

    const userInserito = document.getElementById("username").value;

    const passInserita = document.getElementById("password").value;

    const captchaInserito = document.getElementById("captcha-input").value;

        // Prendiamo il captcha reale mostrato a schermo

    const captchaReale = document.getElementById("captcha-code").innerText;

    // 4. LA LOGICA DI CONTROLLO

    // Controlliamo prima Username e Password

    if (userInserito === USER_CORRETTO && passInserita === PASS_CORRETTA) {

       // Se i dati sono ok, controlliamo il CAPTCHA

        if (captchaInserito.toUpperCase() === captchaReale) {

           // TUTTO CORRETTO: Vai alla dashboard

            alert("Accesso autorizzato! Caricamento area riservata...");

            window.location.href = "dashboard.html"; 

        } else {

            // Se il captcha è sbagliato

            mostraErrore("Il codice CAPTCHA non è corretto.");

            generaCaptcha(); // Cambiamo codice per sicurezza

        }

    } else {

        // Se username o password sono sbagliati

        mostraErrore("Credenziali non valide. Riprova.");

    }

});

// Funzione di supporto per scrivere messaggi d'errore

function mostraErrore(testo) {

    const boxErrore = document.getElementById("messaggio-errore");

    boxErrore.innerText = testo;

}

// Quando la pagina si carica, genera subito il primo CAPTCHA

window.onload = generaCaptcha;

4. Spiegazione Passo-Passo (Per lo Studente)

Cos'è un CAPTCHA?

È un test per capire se chi sta scrivendo è un essere umano o un computer. In questo caso, usiamo un codice di testo casuale.

 Come funziona il codice?

1.  Variabili di controllo: Abbiamo deciso che l'utente è `studente` e la password è `javascript2024`.

2.  `Math.random()`: Questa funzione dice al computer di scegliere un carattere a caso dalla nostra lista.

3.  `event.preventDefault()`: Molto importante! Serve a dire al browser: "Ehi, non ricaricare la pagina subito, prima fammi controllare se i dati sono giusti con JavaScript".

4.  Il confronto (`===`): Il computer controlla se tre cose sono vere contemporaneamente:

    Il nome è giusto? E

    La password è giusta? E

    Il codice scritto è uguale a quello mostrato?

5. Stile Visivo (`style.css`)

Un design pulito aiuta a concentrarsi.

body {

    font-family: 'Arial', sans-serif;

    background-color: #f0f4f8;

    display: flex;

    justify-content: center;

    padding: 50px;

}

.login-container {

    background: white;

    padding: 30px;

    border-radius: 10px;

    box-shadow: 0 4px 15px rgba(0,0,0,0.1);

    width: 350px;

}

label { display: block; margin-top: 15px; font-weight: bold; }

input {

    width: 100%;

    padding: 10px;

    margin-top: 5px;

    box-sizing: border-box; /* Evita che l'input esca dai bordi */

}

.captcha-box {

    background: #eee;

    padding: 10px;

    margin: 20px 0;

    text-align: center;

    border: 2px dashed #999;

}

#captcha-code {

    font-size: 24px;

    font-weight: bold;

    letter-spacing: 5px;

    color: #2c3e50;

}

.btn-login {

    width: 100%;

    padding: 12px;

    background-color: #27ae60;

    color: white;

    border: none;

    cursor: pointer;

    font-size: 16px;

    margin-top: 10px;

}

6. La Pagina Area Riservata (`dashboard.html`)

Questa pagina è molto semplice: serve a dare un feedback immediato allo studente che il suo codice ha funzionato.

<!DOCTYPE html>

<html lang="it">

<head>

    <meta charset="UTF-8">

    <title>Dashboard Riservata</title>

    <style>

        /* Stile rapido per rendere la pagina accogliente */

        body {

            font-family: 'Arial', sans-serif;

            background-color: #e8f5e9; /* Un verde leggero che indica successo */

            text-align: center;

            padding-top: 100px;

        }

        .welcome-box {

            background: white;

            display: inline-block;

            padding: 40px;

            border-radius: 15px;

            box-shadow: 0 4px 10px rgba(0,0,0,0.1);

        }

        h1 { color: #2e7d32; }

        .btn-back {

            display: inline-block;

            margin-top: 20px;

            padding: 10px 20px;

            background-color: #34495e;

            color: white;

            text-decoration: none;

            border-radius: 5px;

        }

    </style>

</head>

<body>

    <div class="welcome-box">

        <h1>🎉 Benvenuto nella Dashboard!</h1>

        <p>Hai superato il controllo dei dati e del <strong>CAPTCHA</strong>.</p>

        <p>Questa è una zona sicura del sito.</p>

         <a href="index.html" class="btn-back">Esci e Torna al Login</a>

    </div>

</body>

</html>

Come collegare tutto (Sintesi per lo studente)

Per far funzionare l'intero progetto, lo studente deve avere questi quattro file nella stessa cartella:

1.  index.html: Il modulo dove inserire i dati.

2.  script.js: Il "cervello" che controlla se la password e il CAPTCHA sono giusti.

Nota: Nel file script.js che abbiamo scritto prima, c'è il comando `window.location.href = "dashboard.html";`. 

Questo comando dice al browser: "Se è tutto ok, apri il file della dashboard".

3.  dashboard.html`: Il traguardo finale.

4. style.css contiene lo stile grafico sull'index.html

LINK cartella compressa dell'esercizio: 
https://laboratoriosia.altervista.org/3DSIA/informatica/eserciziphp/filemanager_didattico2/fileman/uploads/captcha_per_la_classe_3I.zip


Commenti

Post popolari in questo blog

Esercizi in Excel e fogli di Google

Le domande (e le risposte) all'orale di informatica esame di stato nei corsi: Sistemi Informativi aziendali (ex programmatori), Itis Informatica (ex Abacus), Liceo Tecnologico