Costruzione di una piattaforma di voto online: sfide, soluzioni e lezioni fondamentali

Ciao a tutti! 👋 Di recente, ho lavorato ad una semplice e sicura piattaforma online per il voto per il mio progetto minimo universitario e voglio condividere come ho realizzato il tutto. Dall’amministrazione delle registrazioni utente alla configurazione di un sistema di approvazione amministrativo, questo progetto mi ha insegnato molto sull’costruzione di applicazioni web funzionali utilizzando JavaScript e localStorage. In questo post di blog, vi guiderò attraverso lo sviluppo della piattaforma, i challenge che ho incontrato e come li ho superati.

L’obiettivo era creare una semplice piattaforma di voto in grado di gestire:

  • Registrazioni utente: Permettere agli elettori di registrarsi con i loro dettagli.

  • Voto: Permettere agli utenti di votare in sicurezza su sondaggi.

  • Amministrazione: Abilita un amministratore a gestire i sondaggi, approvare/rifiutare le registrazioni utente e sorvegliare il processo di voto.

All’inizio, ho considerato l’uso di un backend completo con MongoDB, ma volevo mantenere le cose semplici, così ho usato localStorage per gestire i dati per questa prima versione del progetto.

  1. Pagine di login e registrazione: Gli utenti possono creare un account o effettuare l’accesso.

  2. Approvazione Amministrativa: La registrazione utente richiede l’approvazione dell’amministratore prima di poter votare.

  3. Sistema di Votazione: Gli utenti registrati possono partecipare ai sondaggi in corso.

  4. Pannello Amministrativo: L’amministratore può creare e gestire i sondaggi, visualizzare le richieste utente e controllare chi può votare.

Ho iniziato costruendo un semplice sistema di accesso e registrazione utilizzando HTML, CSS, JavaScript e localStorage per gestire i dati utente. L’account amministrativo era stato codificato manualmente, ma gli utenti potevano registrarsi fornendo il proprio nome, documento di identità elettorale e password. Tuttavia, ho rapidamente capito che non era una buona idea consentire a chiunque di registrarsi e votare senza l’approvazione dell’amministratore.

Per rendere la piattaforma più sicura, ho introdotto un sistema di approvazione amministrativa. Ogni volta che un utente si registra, la sua richiesta viene memorizzata in localStorage e contrassegnata come “in sospeso”. L’amministratore può quindi rivedere e approvare o respingere queste richieste.

  • Tracking Pending Requests: Ero necessario assicurarmi che gli utenti in attesa di approvazione non potessero ancora votare.

  • Approving Users: Una volta approvati, i dati dell’utente dovevano essere spostati dalla lista “in attesa” alla lista “utenti registrati” in localStorage.

Ho impostato un semplice sistema dove:

  1. Le richieste di registrazione erano memorizzate in localStorage sotto una chiave speciale (accountRequests).

  2. Quando l’amministratore approvava un utente, i loro dettagli erano spostati nella lista users, concessogli accesso al sistema di voto.

  3. Se respinti, la richiesta rimaneva in localStorage per riferimento futuro, cosicché l’amministratore poteva tenere traccia di tutte le decisioni.

La pagina amministrativa consentiva la creazione di sondaggi dinamici, dove l’amministratore poteva aggiungere opzioni di voto multiple. I dati del sondaggio erano memorizzati in localStorage e presentati agli utenti appena loggati e approvati.

  • I sondaggi sono creati dall’amministratore con un modulo che consente opzioni dinamiche. Il modulo permette all’amministratore di aggiungere quante opzioni serve per ogni sondaggio.

  • Gli utenti possono quindi visualizzare questi sondaggi e castare il loro voto.

Il sistema di voto era progettato per essere semplice: una volta che gli utenti erano loggati e approvati dall’amministratore, potevano vedere i sondaggi attivi e castare il loro voto.

  • Prevenzione del Voto multiplo: Era necessario fare in modo che gli utenti potessero votare solo una volta per sondaggio.

  • Memorizzazione dei Risultati: I voti erano salvati in localStorage, legati specificamente all’utente e al sondaggio.

Ogni voto era legato all’ID utente e al sondaggio specifico. Questo garantiva che ogni utente potesse votare solo una volta, e i risultati venivano salvati in localStorage in maniera sicura.

Volevo assicurarmi che gli utenti sapessero se la loro registrazione era stata approvata, rifiutata o ancora in sospeso. Per fare questo, ho aggiunto una pagina “Controlla lo Stato” dove gli utenti potevano inserire il loro ID di registrazione per controllare lo stato di approvazione.

  • Persistenza dello Stato Utente: Tenere traccia di ogni richiesta di registrazione e associare questa con lo stato corretto è stato complesso.

Ogni richiesta di registrazione era assegnata un ID univoco, e gli utenti potevano inserire questo ID per sapere se la loro richiesta era stata approvata, rifiutata o ancora in sospeso. Questa semplice pagina dello stato ha migliorato l’esperienza utente fornendo feedback in tempo reale sulla loro richiesta.

Inizialmente, non ero sicuro di come strutturare il sistema di approvazione. Dopo alcuni tentativi e errori, decisi di usare localStorage per gestire il processo di approvazione utente. Questo ha tenuto il sistema semplice e ha permesso agli amministratori di aggiornare rapidamente.

Permettere all’amministratore di aggiungere opzioni di voto dinamicamente è stato complesso ma gratificante. L’ho implementato permettendo all’amministratore di creare sondaggi con quante opzioni servissero, che poi venivano salvate come array in localStorage.

Un’aspetto complesso da risolvere è stato assicurarsi che gli utenti potessero votare solo una volta per sondaggio. Ho risolto questo problema associando i voti all’ID utente e all’ID del sondaggio, garantendo così che ogni utente potesse votare solo una volta.

La costruzione di questo platform di voto mi ha insegnato molto sulla gestione dati utente, sulla creazione di flussi di lavoro di approvazione e sulla gestione di contenuti dinamici con localStorage. Ecco alcuni degli insegnamenti chiave:

  • Gestione Utenti: Ho imparato come gestire account utente, inclusa la gestione di registrazioni in sospeso e approvazioni.

  • localStorage per la Persistenza Dati: Questo è stato il mio primo utilizzo estensivo di localStorage in un progetto ed è stato una grande esperienza di apprendimento. Funziona bene per piccoli progetti ma potrebbe essere sostituito con una database come MongoDB per scalabilità.

  • Creazione di un Pannello Amministrativo: La creazione di una pagina amministrativa per gestire utenti e sondaggi mi ha dato un’insight sull’complessità della gestione amministrativa in un sistema.

Anche se la versione corrente della piattaforma funziona benissimo per votazioni a scala ridotta, sto considerando un miglioramento verso una soluzione più robusta in futuro:

  • Integrazione con MongoDB: Per progetti più grandi, la migrazione verso MongoDB offrirebbe migliore persistenza dei dati e scalabilità.

  • Implementazione Backend: L’utilizzo di Express.js come backend consentirebbe un maggior controllo sicuro dei dati e una gestione più semplice degli account utente e dei sondaggi.

Per ora, sono soddisfatto di come è risultata la piattaforma. È semplice, sicura e funzionale per lo scope del progetto.


Scoprite la piattaforma in diretta: Piattaforma di Votazione Online
Esplorare il codice su GitHub: Repo del Sistema di Votazione


Creare questa piattaforma di voto online è stato un fantastico esperienza formativa. Dall’elaborazione dell’iscrizione utente e dalle approvazioni amministrative, alla creazione di sondaggi dinamici e alla garanzia della sicurezza dati, ogni sfida mi ha aiutato a crescere come sviluppatore. Sono emozionato ad applicare queste conoscenze ai progetti futuri, e spero che questo post vi ispirerà a costruire qualcosa di simile!

Grazie per aver letto, e non esiti a condividere i tuoi pensieri o domande qui sotto! 😄

Source:
https://arkadiptakundu.hashnode.dev/building-an-online-voting-platform-challenges-solutions-and-key-learnings