先说几个核心结论:借助 Codex 插件驱动 Supabase 搭建 MVP,意味着你无需手写后端代码、不必配置数据库、也不用操心底层运维。前端开发者完全可以在 2 小时内打通用户注册→登录→数据读写→文件上传的完整链路。下面逐一拆解每个步骤。
安装 Codex 桌面版并启用 Supabase 插件
首先,前往 Codex 官网下载桌面 App,安装后使用 OpenAI 账号登录。接着打开左侧的插件市场(Plugins),搜索“Supabase”,点击安装并授权它访问你的 GitHub 和本地文件系统。
这一步很关键,建议不要跳过——如果未启用 Supabase 插件,Codex 将无法识别项目中的 supabase.js 配置,也无法自动生成 auth、data、storage 相关代码。
装好后重启 Codex,右下角状态栏会出现一个 Supabase 图标,悬停上去会显示“Connected to Supabase CLI”,表明一切就绪。
新建项目并一键生成 Supabase 后端骨架
点击左上角“New Project”,选择模板“Next.js + Supabase Auth Starter”,输入项目名称(例如 my-mvp),确认创建。
Codex 会自动帮你完成:拉取最新的 starter 模板 → 运行 supabase init → 启动本地 Docker 容器 → 在 Studio 中预建 auth、todos、storage 三张表 → 生成 .env.local 并填入本地 anon key 和 URL。
整个过程大约只需 90 秒,速度不错。终端输出最后一行的提示是 ✅ Local Supabase stack is ready at http://localhost:54323,此时浏览器已自动打开 Studio 页面。
用自然语言指令生成完整功能模块
接下来是重点环节。在 Codex 主编辑区顶部的输入框中,直接输入中文指令:
“为首页添加一个带邮箱密码输入框的注册表单,提交后调用 Supabase Auth 创建用户,并跳转到 /dashboard;失败时在表单下方显示红色错误提示。”
按下回车,Codex 会自动分析上下文,在 app/register/page.tsx 中生成完整的 React 组件,包含 useFormState、supabase.auth.signUp 调用、错误捕获逻辑以及样式类。
继续输入:“在 dashboard 页面顶部显示当前用户邮箱,加一个退出按钮,点击后清空 session 并重定向回 login 页面。”
它会立即在 app/dashboard/page.tsx 中插入带 useEffect 监听 auth 状态、supabase.auth.signOut() 调用以及路由跳转的代码,并自动引入 redirect 和 useRouter。
实时调试与权限修复
运行 npm run dev 启动 Next.js 开发服务器,访问 http://localhost:3000/register 提交一个测试邮箱查看效果。
如果页面卡住或返回“permission denied”,不必慌张。打开 Supabase Studio,左侧点击“Authentication” → “Policies”,找到 auth.users 表,关闭“RLS enabled”开关。
这一步不能省略——RLS 默认开启时,即使是 anon 用户也无法读写 auth.users 表,注册流程必然中断。
刷新页面重试一次,成功后你会看到邮箱出现在 dashboard 页,点击退出按钮即可立即登出。
添加文件上传功能(三步闭环)
这里有两种方法,根据个人偏好选择。
方法一:自然语言指令直达
直接在 Codex 输入:“在 dashboard 页面加一个文件上传区域,支持 JPG/PNG,上传后显示预览图,并把文件路径存进 storage bucket ‘avatars’,同时更新 users 表的 avatar_url 字段。”
它会生成 useUploadFile Hook、supabase.storage.from('avatars').upload() 调用和 URL 拼接逻辑,还会自动补全 RLS 规则 SQL 语句,供你一键粘贴到 Studio 的 Storage → Policies 中。
方法二:手动微调关键字段
进入 Studio → Storage → Buckets → 新建 bucket,命名为 avatars,将“Public”设为 true;然后在“Policies”中新建一条 INSERT 策略,SQL 条件填写:(bucket_id = 'avatars');最后回到 Table Editor,打开 auth.users 表,点击“Edit schema”,新增列 avatar_url,类型设为 text。
完成之后上传一张头像,刷新页面,预览图和数据库字段就会同步更新。
