认证
9 分钟

Tutorial / Practical Guide

如何接入登录系统

比较托管认证与自建认证,并给出第一版接入建议。

结论

第一版不要自研复杂认证。Supabase Auth 或 Clerk 都能满足邮箱登录与常见第三方登录。

Supabase 登录配置界面

什么时候该接入认证

只要产品存在下面任意一种场景,就该尽早把登录系统接上:

  1. 需要保存用户数据,例如草稿、收藏、项目配置。
  2. 需要区分游客和付费用户。
  3. 需要记录操作历史,或者让用户在多设备之间同步状态。
  4. 需要给不同用户展示不同内容。

很多独立开发者会把认证拖到后面,因为它看起来不像核心功能。但实际情况正好相反。认证一旦晚接入,后面通常要补三件事:数据库结构、页面跳转、权限判断。越往后补,返工越多。

先选方案

第一版最实用的判断标准不是“谁最强”,而是“谁最少阻塞上线”。

方案适合场景代价
Supabase Auth已经用 Supabase 数据库,想少写代码配置项较多,但整体一致性好
Clerk更重视开箱即用和 UI 组件成本通常更高,平台耦合更强
Auth.js想完全掌控流程需要自己处理更多边界

如果你的产品已经把数据放在 Supabase,优先选 Supabase Auth。原因很直接:用户表、RLS、Session、Server Component 读取用户态,都在同一套体系里。

推荐接入顺序

1. 先把登录页跑通

不要一上来就做复杂注册流程。先确认最小路径:

  1. 用户输入邮箱和密码。
  2. 系统创建账号或登录账号。
  3. 页面跳转到 /auth/callback
  4. 服务器写入登录态 Cookie。
  5. 页面刷新后能读到当前用户。

2. 再处理数据库权限

认证成功不等于数据安全。你还需要做两件事:

  1. 在业务表里保存 user_id
  2. 给表开启 RLS,让用户只能访问自己的数据。

没有这一步,登录只是“能进来”,不是“能安全地进来”。

3. 最后补体验

等主流程稳定后,再做这些增强项:

  1. 注册成功后的欢迎邮件。
  2. 密码重置。
  3. 第三方登录。
  4. 头像、昵称和个人资料页。

最容易踩的坑

回调地址配错

很多问题都卡在 Redirect URL。你要区分两个地址:

  1. Google 或其他 OAuth 先回到 Supabase 的 callback。
  2. Supabase 再跳回你网站自己的 /auth/callback

只做前端登录,没做服务端会话

如果只是浏览器里拿到用户对象,但服务端页面读不到登录态,刷新后就会掉线。原因通常是 cookie 没写对,或者 callback 没处理好。

只建表,不开 RLS

这会让你的认证看起来“能用”,但安全性不完整。真正上线前,业务表都应该有自己的访问策略。

一个更稳的落地方式

我建议把认证拆成三层:

  1. 认证层:Supabase Auth 负责登录与会话。
  2. 数据层:业务表保存用户自己的数据。
  3. 权限层:RLS 控制谁能读写什么。

这样做的好处是,后面你换前端框架、换页面结构,认证逻辑也不容易散掉。

验证标准

完成后,至少检查下面 4 件事:

  1. 注册后能收到邮件。
  2. 登录后页面刷新不会丢失登录态。
  3. 数据库里能看到对应用户记录。
  4. 退出登录后,受保护页面会回到未登录状态。

参考

参考资料

本文优先参考以下官方文档和产品资料,价格、功能与政策请以来源页面当前内容为准。

下一步工作流