独立开发·阅读约 1 分钟·
给创业项目用 AWS Cognito 做登录,我踩了三周坑:独立开发者认证选型实录

给创业项目用 AWS Cognito 做登录,我踩了三周坑:独立开发者认证选型实录

一位创业者记录了自己用 AWS Cognito 搭建认证的三周噩梦:文档混乱、Amplify v6 破坏性升级、本地开发无法调试、属性配置错就得迁移整个用户池。对正在选认证方案的小团队,这是一份真实的避坑报告。

原文来源:Josh Karamuth — 一位创业者在 AWS Cognito 上花了三周时间搭建认证,得到的教训是:选认证方案时,开发者体验比"生态便利"重要得多。

Josh Karamuth 的创业项目需要认证系统。团队倾向用 Cognito,理由很常见:"反正在 AWS 生态里,前 5 万月活用户免费。"他之前用过 Auth0、Firebase Auth,甚至手写过 JWT 系统——虽然不太光彩但能用。想着 Cognito 能有多难?三天后他就察觉不对:"不是漏了个分号的那种不对,是我照着文档一步步做,密码重置流程还是跳到了错误页面的那种不对。"当时他开着十二个文档标签页,复制粘贴了所有代码示例,还看完了教程视频。三周后他承认:我错了。

文档是给五种人写的,所以对谁都没用

Cognito 文档最大的问题是目标读者太多:企业架构师想理解底层身份协议,前端工程师只想要一个登录表单,移动开发者需要原生 SDK。AWS 试图同时服务所有人群,结果是"对每个人都没用"。

他搜"custom attribute validation",点进去第一段就在讲目录 schema,前提是你已经读过另外四页他根本不知道存在的文档。没有清晰的线性路径,只有"一张超链接和祈祷织成的网"。代码示例更是灾难:一半是老 JavaScript SDK,有的还在用 Amplify v1 API,另一些是裸 AWS SDK,文档从来不告诉你这段代码对应哪个版本,全靠对着 import 语句玩侦探游戏。

—— 广告 ——

Amplify v6:不是升级,是绑架

他们开始开发时 Amplify 还是 v5。他写好了认证流程,测试通过,提交,然后去做别的功能。几周后回来修 bug,看到控制台有 deprecation 警告,顺手升级到最新版——然后整个认证流程崩了。

Amplify v6 不只是改了方法签名,而是从底层重构了和 Cognito 的交互方式。他围绕旧 API 写的整个 UI 流程全部作废——"没了,被替换了,消失了"。不是重构,是重写。迁移指南存在吗?存在,但"更像一张丢了一半地标的藏宝图"。生产环境跑得好好的认证逻辑,因为库维护者决定旧 API 不再是"官方路径"而被迫重建。"这不是升级,这是绑架。"

本地开发是特殊的痛

Cognito 是纯云服务,没有官方本地实例。这意味着你永远在打真实 AWS 端点:飞机上没法测、断网没法测、想快速迭代也得等网络往返。社区倒是有 serverless-offline 插件和本地模拟器,但都是维护程度和保真度参差不齐的社区项目。AWS 官方的建议基本是"对着云测",对在飞机上写代码、网络不稳、或者只想快速迭代的人来说等于没说。

他花了大把时间搭本地 mock,结果 mock 和真实行为对不上——本地测不出来的 bug,全在 staging 等着你。本地开发的意义就是早点发现问题,而 Cognito 在反着来。

托管 UI 能改 Logo、能调一点 CSS,但布局和结构是 AWS 的地盘,"你只是租了个房间"。想要品牌级的登录页?社区建议是"用 SDK 自己写 UI"——那托管 UI 还省了什么?如果连登录页都得自己写,它存在的意义就很可疑了。

压垮骆驼的邮箱属性

他的应用只需要邮箱认证:注册、验证、设密码,完事。然后他发现 Cognito 对"邮箱"有三种不同的处理方式——核心属性、别名、自定义属性——配置项散落在控制台多个页面,相互依赖的规则从不解释。他不小心把一个该用标准属性的配置设成了 custom attribute。

想改?不行。用户池属性一旦创建为 custom 就永远无法更改。如果你的认证方案依赖属性之间的关系,而你把关系搞错了,摆在你面前的选择只有两个:删掉整个用户池重来,或者写一个把用户迁移到新池的复杂迁移流程。对生产应用来说"删了重建"不是选项,于是只能写迁移脚本、在新池里处理密码重置、跟用户道歉——全因为控制台里一个语义含糊的下拉框。

独立开发者能带走什么

作者没有停留在吐槽。他总结的教训,对每一个小团队都值得抄下来:

认证不是省成本的地方。"已经在生态里"这个理由很诱人,但生态近不近,抵不过你每次碰它都难受。"免费额度"算起来很美,真把和文档搏斗、为破坏性升级重写代码的工程时间算进去,几年代理认证服务费都够付了——"我们浪费在调试 Cognito 上的时间,够付好几年付费认证服务,还能少熬夜吃几顿冷披萨。"他下次会先选开发者体验好的工具,再考虑 AWS 集成便利。

**先做 PoC 再上车。**别急着定方案,先搭一个带自定义属性、邮箱验证、密码重置流程的完整原型,掐表看看自己花了多久、数数最后开了多少个文档标签页。超过二十个,就该重新考虑了。如果不想自己趟坑,Auth0、Firebase Auth、Supabase Auth 这些托管方案都值得放进对比清单——它们同样有免费额度,但开发者体验是另一回事。

顺带一提,他现在还在用 Cognito——项目陷得太深拔不出来了。"每次打开 AWS 控制台看到那个 user pool,我都感到一种安静的怨恨,像那个从不洗碗还老借你东西的室友。"

分享到
微博Twitter

© 2026 四月

原文链接:https://www.aprilzz.com/indie/aws-cognito-startup-lessons