基于 Firebase 的定制化电子商务系统
我从零开始构建了一个定制化的电子商务网站。我没有使用现成的平台,而是使用了 Firebase Realtime Database 和 Netlify。
目标是为一家 POS 终端转售商提供服务。他们需要产品目录、价格变体和管理面板。销售团队需要直接从网站下单。
以下是我的构建过程以及我学到的经验。
技术栈
• 原生 HTML、CSS 和 JS。 • 使用 Firebase Realtime Database 存储数据。 • 使用 Firebase Storage 存储文件。 • 使用 Netlify 进行托管和函数处理。
关键决策
数据库分离 我将电子商务数据库与内部管理数据库分开。这可以防止商业数据与薪资或预算等敏感的管理数据混淆。
全局价格存档 我没有将价格方案放入每个产品中,而是创建了一个全局资费文件夹。产品仅包含一个 ID 数组。这避免了数据冗余。如果方案发生变化,我只需更新一次。
原子化订单 当多人同时下单时,会面临竞态条件(race conditions)。如果两个人读取了同一个订单号,一个订单可能会消失。我使用了 Firebase 的
runTransaction()来确保每个订单都能获得一个唯一的、连续的编号。安全的管理访问 我没有在源代码中存储密码。我通过 Web Crypto API 使用了 PBKDF2。这使得暴力破解攻击变得非常困难。代码中仅包含盐值(salt)和哈希值(hash)。
经验教训
• 注意虚值(falsy values)。在 JavaScript 中,0 是虚值。如果产品价格为 0,像 "price || null" 这样的简单检查会删除该价格。请始终使用 "price != null" 以包含零。
• 在 HTTP 标头中配置 CSP。用于内容安全策略(Content Security Policy)的 Meta 标签不支持子域名的通配符。Firebase 使用动态子域名。我将 CSP 移到了 netlify.toml 中以使其生效。
• 使用安全规则(Security Rules)进行真正的保护。永远不要依赖在 UI 中隐藏按钮。使用 Firebase 规则来限制谁可以读取和写入数据。
构建定制化解决方案需要谨慎的架构选择。事务处理和标头配置等细节可以防止生产环境中的重大故障。
来源:https://dev.to/androve2k/custom-e-commerce-on-firebase-catalog-atomic-orders-and-admin-panel-42ec
