基于 Firebase 的定制化电子商务系统
我从零开始构建了一个定制化的电子商务网站。我没有使用现成的平台,而是使用了 Firebase Realtime Database 和 Netlify。
客户需要特定的设置。他们想要一个带有价格变体的产品目录和一个管理面板。他们还希望销售团队能直接从网站下单。
以下是我解决主要技术挑战的方法。
数据隔离 我将电子商务数据库与内部管理数据库分开。这可以防止商业数据与员工薪资或预算等敏感文件混淆。
价格数据建模 价格方案经常在不同产品中重复出现。如果你在每个产品中都复制一份方案数据,更新起来会变成一场噩梦。
- 我为所有方案创建了一个全局存档。
- 每个产品仅持有一个方案 ID 数组。
- 这使得更新非常迅速,并能防止数据错误。
原子化订单编号 当多人同时下单时,会面临竞态条件(race condition)。如果两个用户读取了相同的最后一个订单号,其中一个订单就会被覆盖。
- 我使用 Firebase transactions 来解决这个问题。
- runTransaction 函数确保即使在大量并发用户的情况下,编号也能正确递增。
- 这保证了每个订单都有一个唯一的编号。
安全的管理权限访问 我不想在源代码中存储密码。我也避免了使用像 MD5 这样简单的哈希算法。
- 我通过 Web Crypto API 使用了 PBKDF2。
- 这会对哈希进行数千次迭代。
- 这使得暴力破解攻击对黑客来说成本过高。
- 我只在代码中存储盐值(salt)和哈希值。
修复“零” Bug 我发现了一个 Bug,即价格为 0 的产品会显示为“价格待定”。
- 这是因为 JavaScript 将 0 视为“假值”(falsy)。
- 我通过修改逻辑修复了这个问题。
- 我不再使用 "price || null",而是改用 "price != null"。
- 这确保了系统能将 0 识别为一个有效的数字。
CSP 配置 Firebase 使用动态子域名。标准的 HTML 内容安全策略(CSP)meta 标签无法处理这些通配符。
- 我将 CSP 从 HTML 移到了 Netlify 的 HTTP 标头中。
- 这允许我使用通配符,从而使 Firebase 服务能够正常工作。
构建定制化系统不仅仅是编写代码。它还需要做出能够防止生产环境故障的架构选择。
出处:https://dev.to/androve2k/custom-e-commerce-on-firebase-catalog-atomic-orders-and-admin-panel-42ec
