Skip to main content
Architecture11 min read

认证比你想象的更难

我在不同项目中实现了4次认证。每次我都以为只需要2天,结果每次都花了2周。原因如下,以及我会如何改进。

Part ofCloud & Infrastructure->
By Jason TeixeiraDecember 28, 2025
AuthenticationSecuritySupabaseJWTArchitecture
Share:
On this page

我写过的每个项目计划里都有一条:"认证——2天。"

每个项目回顾里都有一条备注:"认证花了2周。"

我已经构建过4次认证系统。每一次,我都低估了它。以下是原因,以及我最终学到的教训。

冰山一角

你以为的认证:

  • 登录表单
  • 存储令牌
  • 检查令牌是否有效
  • 完成

实际的认证:

  • 登录表单(邮箱/密码 + OAuth + 魔法链接 + 多因素认证?)
  • 密码哈希(bcrypt、argon2,成本因子选多少?)
  • 会话管理(JWT vs 会话cookie vs 两者都用?)
  • 令牌刷新(静默刷新、轮换、撤销)
  • CSRF防护(同站cookie、双重提交令牌)
  • 速率限制(登录、注册、密码重置)
  • 密码重置流程(令牌生成、过期、单次使用)
  • 邮箱验证(令牌、重新发送逻辑、更换邮箱怎么办?)
  • 账户锁定(尝试次数?解锁流程是什么?)
  • 基于角色的访问(管理员 vs 用户 vs 版主)
  • API密钥管理(用于程序化访问)
  • 密码变更时会话失效
  • "记住我" vs "仅本次会话"
  • 新设备登录通知
  • 审计日志(谁登录、何时、从何处)

以上是15+个功能。每个1-2天,加起来就是一个月。

我现在怎么做:使用Supabase Auth并扩展

在两次自建认证系统并痛不欲生之后,我现在从Supabase Auth(或Clerk、Auth.js)开始。它处理:

  • 邮箱/密码(使用bcrypt)
  • OAuth提供商(Google、GitHub、Discord)
  • 带刷新的JWT令牌
  • 邮箱验证
  • 密码重置
  • 会话管理
  • 速率限制

这覆盖了80%的认证需求,由全职思考认证的人来处理。我专注于那20%与我应用相关的部分:

Reader route

article -> proof -> offer

ReadClusterProofScope

cluster

Cloud & Infrastructure

intent

Architecture

route

next step

What to do with this

Turn the note into a build path.

If this topic maps to a real business problem, keep reading the cluster, study the academy path, or route the work into a scoped engagement.

Jason Teixeira
Written by
Jason Teixeira
Founder, Sage Ideas Studio · Principal Engineer
livebuild 5d6c8652026-08-05 06:00Z
// solo studio// no analytics resold// every commit human-reviewed