Val Town 又换认证了。

链路很短:Supabase → Clerk → Better Auth。反常点也很清楚:Clerk 并不是一个没人用、做不下去的产品。它刚融了 5000 万美元,也有不少满意用户;Supabase 同样势头很强,刚拿到 1 亿美元融资,估值 50 亿美元。

但 Val Town 还是走了。

这件事最值得看的,不是“Clerk 好不好”。而是认证服务一旦接管用户表和会话,省掉的工程活,很可能换成架构锁死和可靠性债务。对社交、协作、平台型产品来说,这不是边角问题,是地基问题。

Val Town 离开的不是 Clerk,而是一套架构假设

Val Town 原来用 Supabase 的一整套能力,包括认证。2023 年迁出 Supabase 后,它把数据库放到 Render,把认证交给 Clerk。到 2023 年底,团队内部已经开了“离开 Clerk”的 issue。一个月前,这个 issue 关闭,认证切到了 Better Auth。

这条迁移线索可以压成一张表:

阶段方案拿到的便利暴露的代价
起点Supabase认证和数据库在同一平台内迁出时耦合明显
中间Clerk认证、用户数据、会话都更省心用户表和会话控制权外移
现在Better Auth开源核心,本地掌控数据和会话仍有维护方集中带来的 vendor risk

Clerk 早期有一个很强的主张:可以考虑“删除 users table”。甚至有视频标题叫“DELETE your Users table”。

这对简单前端应用很诱人。用户只看自己的头像、邮箱、设置,JWT 里带一点信息,后台少管很多事。小团队少写很多胶水代码,当然开心。

Val Town 不是这种产品。

它有社交属性。页面上会出现很多别人的用户名、头像、内容归属。用户表不是登录流程的附属品,而是产品骨架。

硬伤很快出现。

Clerk 用户 API 曾经有一个生产限流:整个账户 5 requests/second。不是单用户,是全账户。开发时读取用户名、头像、邮箱很顺;到生产环境,社交列表页就可能撞墙。

Val Town 只能把 Clerk 数据通过 webhook 同步到自己的数据库。同步一上来,中间态也跟着来了:

  • 用户已经有 Clerk 账户,但 Val Town 数据库里还没有用户行;
  • 用户行有了,但用户名还没补完;
  • 认证策略归 Clerk,用户名、编辑器设置等归 Val Town;
  • 同一类用户信息开始出现“双权威”。

这不是接口慢一点的问题。状态变多了,边界变糊了,事故路径变长了。

“天下熙熙,皆为利来。”放到 SaaS 里,就是供应商卖的是省心,客户买的是少写代码。但少写的那部分代码,如果正好是你的产品骨架,迟早要还。

真正致命的是会话:外包后变成全站单点

用户表带来的是数据模型冲突。会话托管带来的,是可靠性冲突。

现代 Web 会话常常短周期、持续刷新。好处是可以快速失效。坏处是用户每隔几分钟就要换一次 cookie。Val Town 当时的刷新流程依赖 Clerk。

结果很直接:Clerk 一旦出问题,不只是注册、登录、退出坏掉。已经登录的用户,也可能无法正常使用网站。

这类故障很阴。

它表面上叫“认证服务宕机”,落到产品上就是“全站关键路径断了”。原文提到,从 2025 年 5 月以来,Clerk 状态页显示大致在 two to three nines 之间;更早没有公开数据,Val Town 作者只说自己记得多次网站坏掉且无法修。

这里不能写成“Clerk 普遍失败”。证据不支持。

Clerk 适合不少场景:简单前端应用、后台管理、社交关系弱的产品、想快速接入登录和反滥用能力的小团队。它的 SDK 覆盖 Remix、Fastify、Express,也做了后台管理工具。对这些团队,Clerk 的价值是真的。

Val Town 的问题在另一层:Clerk 的默认架构假设,和 Val Town 的产品形态不合。

做认证选型时,真正该对比的是这几类控制权:

控制权可以外包到什么程度失控后的后果
登录入口通常可以外包新用户注册、登录受影响
用户主表社交、协作、平台型产品要谨慎用户资料、关系、内容归属出现双权威
会话刷新强依赖外部服务风险很高已登录用户也可能被拖下线
权限和状态越接近核心业务,越该本地掌控产品逻辑被供应商可用性和模型限制卡住

对正在选型认证方案的开发者和 CTO,这意味着动作要变。

如果你做的是内容社区、协作工具、开发者平台,采购 Clerk、Auth0、Supabase Auth 或类似方案前,别只看接入速度。要画一张故障图:供应商 API 慢了、webhook 丢了、会话刷新失败了,哪些页面还能用,哪些数据会变脏。

如果你已经上线,短期未必需要迁移。更现实的动作是补三件事:本地用户表是否是权威源;会话是否能在供应商短时故障时继续有效;用户资料同步失败时有没有可恢复路径。

这比“要不要自研认证”更重要。

Better Auth 赢在边界感,但还没到可以闭眼押注

Val Town 选择 Better Auth,吸引力主要有三点:代码质量不错,框架集成可用,开源核心能独立运行。

更关键的是,Val Town 拿回了两件事:数据和会话。

在 Val Town 的用法里,Better Auth 的付费服务更像无状态辅助。Val Town 管自己的数据,一个插件在自己站点上提供 API,让 Better Auth 的 dashboard 拉取信息,做轻量用户管理。它不再参与会话管理,也不再决定站点是否能维持已登录用户的正常访问。

这就是分水岭。

认证服务不是越省心越好。越靠近用户表、会话、权限和核心状态,越要问:这部分如果外部服务明天挂了,我的网站还像不像一个网站?

当然,Better Auth 也不是神药。原文承认,它是一个大而复杂的代码库,主要由一家公司维护,vendor risk 仍然存在。

只是风险形态变了。

以前的风险是:外部服务不在线,站点关键路径受影响。现在的风险更像:开源项目和维护方长期质量能不能跟上。两者都要管,但不是一个量级。

Val Town 迁移时还做了两周过渡。端点同时接受 Better Auth 和 Clerk 两种 cookie,用户通过新登录页逐步切过去。LLM 辅助了复杂改造,但安全相关代码最后仍然需要逐行读、重写、测试。

机器人能提速,不能替你背锅。

接下来最该观察的变量也不复杂:Better Auth 的维护质量能不能稳住;Val Town 本地会话和用户数据模型能不能减少事故半径;Clerk 这类托管认证服务,会不会把“保留本地用户表”和“弱化会话单点依赖”做成更清晰的产品边界。

Val Town 这次不是在否定 Clerk,而是在提醒一件老事:成功产品也可能带错架构假设。对的人用它,是捷径;错的人用它,是锁链。