建立線上投票平台:挑戰、解決方案與关键技术

大家好!👋 最近,我為我的大學迷你項目建立了一個簡單而安全的線上投票平台,並想與大家分享我的經驗。從管理用戶註冊到設定管理員審核系統,這個項目教導了我很多關於使用JavaScript和localStorage建立功能性的網絡應用程序的知識。在本文中,我将引导大家通過平台的開發,遇到的挑戰以及如何克服它們。

目標是建立一個簡單的投票平台,能夠處理:

  • 用戶註冊:允許选民签到注册他们的详细信息。

  • 投票:讓用戶安全地對投票進行投票。

  • 管理員控制:讓管理員管理投票,批准/拒絕用戶註冊,並監督投票過程。

最開始,我考慮使用带有MongoDB的全栈後端,但我希望保持簡單,所以我在這個版本的项目中使用localStorage來管理數據。

  1. 登錄和註冊頁面:用戶可以創建帐户或登錄。

  2. 管理員審核: 用戶註冊需要在管理員審核通過後才能投票。

  3. 投票系統: 註冊用戶可以在活躍的投票中投票。

  4. 管理員面板: 管理員可以創建和管理投票,查看用戶請求,並控制谁可以投票。

我最初使用HTML、CSS、JavaScript和localStorage來建立一個簡單的登入和註冊系統來處理用戶數據。管理員帳號是硬编码的,但用戶可以通過提供他們的全名、选民身份证和密碼來註冊。然而,我很快意識到,讓任何人都能夠註冊和投票,而沒有管理員審核,並不是最好的主意。

為了使平台更加安全,我引入了一個管理員審核系統。每當用戶註冊時,他們的請求會被儲存在localStorage中並標記為”待處理”。管理員可以然後查看和通過或拒絕這些請求。

  • 追蹤待處理請求

    : 我需要確保 待批准的用戶還不能投票。

  • 批准用戶: 一旦用戶被批准,其數據必須從「待處理」列表移转到 localStorage 的「註冊用戶」列表中。

我建立了一個簡單的系統,其中有:

  1. 註冊請求被存儲在 localStorage 中,並使用特別的鍵(accountRequests)來標識。

  2. 當管理員批准一個用戶時,他們的名稱會被移至 users 列表,從而授予他們投票系統的訪問權。

  3. 如果被拒絕,請求會保留在 localStorage 中以供未來參考,使管理員能夠追蹤所有決定。

管理員頁面允許創建動態投票,管理員可以添加多個投票選項。投票數據存儲在localStorage中,並在用戶登錄並批准後呈現給用戶。

  • 投票由管理員使用表單創建,允許動態選項。表單允許管理員根據需要為每個投票添加任意多個選項。

  • 用戶可以查看這些投票並投票。

投票系統的設計非常簡單:用戶登錄並獲得管理員批准後,可以查看活躍的投票並投票。

  • 防止重複投票:我需要確保用戶只能在每個投票中投票一次。

  • 存儲結果:投票結果存儲在localStorage中,與特定的用戶和投票相關聯。

每票都与用戶的ID和特定投票相關联。這確保了每位用戶只能投一票,結果安全地儲存在localStorage中。

我想要確保用戶知道他們的註冊是否已被批准、被拒絕還是仍在待處理中。為了實現這一點,我增加了一個“查看狀態”頁面,用戶可以輸入他們的註冊ID來查看批准狀態。

  • 保存用戶狀態: 追蹤每個註冊請求並將其與正確的狀態關聯是棘手的。

每個註冊請求都分配有一個唯一ID,用戶可以輸入此ID來查看他們的請求是否已被批准、被拒絕還是仍在待處理中。這個簡單的狀態頁面通過提供實時反饋改善了用戶體驗。

最初,我不知如何結構化批准系統。经过一些試錯,我決定使用localStorage來管理用戶批准過程。這使得系統簡單化,並允許管理工作快速更新。

允许管理工作添加多種投票選項 dynamically 具有挑戰性但也很 rewarding. 我實現這一點通過允許管理工作創建具有必要數量的選項的投票,這些選項然後被保存為在localStorage中的數組。

一個棘手的問題是如何確保用戶在每個投票中只能投一次票。我通過將票數與用戶的ID和投票ID關聯起來來解決這個問題,確保每個用戶只能投一次票。

建立這個投票平台讓我學到了很多關於處理用戶數據、創建審核 workflow以及使用localStorage管理动态内容的知识。以下是一些主要的學習心得:

  • 用戶管理:我學會了如何管理用戶帳號,包括處理待審核的註冊和審核。

  • localStorage用於數據持久化:這是我在项目中首次廣泛使用localStorage,是一次很好的學習經歷。對於小項目來說,它效果很好,但对于可扩展性,可能需要用MongoDB等数据库来替代。

  • 建立管理面板:創建一個管理页面來管理用戶和投票,讓我對系統中的管理控制复雑性有了更深入的了解。

雖然目前平台的版本對於小规模的投票來說效果很好,但我正在考慮在未來將其迁移到更健壯的解決方案:

  • MongoDB 整合:對於更大的項目來說,迁移到 MongoDB 將提供更好的數據持久性和可擴展性。

  • 後端實現:使用 Express.js 作為後端將允許更安全的數據處理和更容易管理用戶帳號和投票。

目前,我很滿意平台最終的效果。它簡單、安全、對於項目範圍來說功能完善。


查看活躍的平台線上投票平台
在 GitHub 上查看代碼投票系統倉庫


建立這個線上有投票平台是一次极佳的学习经历。从处理用户注册和行政批准到创建动态投票并确保数据安全,每一个挑战都帮助我作为一名开发者成长。我很兴奋能把这些学习成果应用到未来的项目中,希望这篇文章能激励你也去构建类似的东西!😄

感谢阅读,欢迎在下方分享你的想法或问题!😄

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