概述
一个适用于生产的订阅模板,使用 Next.js 15、React 19、Supabase、Drizzle ORM 和 Dodo Payments。它配备了 Google OAuth、订阅结账、Webhook 处理、数据库架构和基本仪表板。如果您只需要现有应用程序的路由处理程序,请参阅专用适配器:Next.js 适配器 和 Express 适配器。
先决条件
- Node.js 18+(或 Bun 1.0+)
- Supabase 项目(URL、匿名密钥、服务角色密钥、数据库 URL)
- Dodo Payments 账户(API 密钥、Webhook 密钥)
- Google Cloud OAuth 客户端(客户端 ID 和密钥)
快速开始
1
克隆并安装
2
创建 Supabase 项目
创建一个 Supabase 项目并复制:
- NEXT_PUBLIC_SUPABASE_URL
- NEXT_PUBLIC_SUPABASE_ANON_KEY
- SUPABASE_SERVICE_ROLE_KEY
- DATABASE_URL(连接字符串)
3
配置 Google OAuth
在 Google Cloud 中将重定向 URI 设置为:
https://[your-project-ref].supabase.co/auth/v1/callback,然后使用您的客户端 ID 和密钥在 Supabase Auth 中启用 Google 提供程序。4
配置 Dodo Payments
从 Dodo 仪表板生成 API 密钥和 Webhook 密钥。在开发时将环境设置为
test_mode。5
创建 .env.local
6
配置数据库架构
已创建的表:
users, subscriptions, payments。7
部署 webhook 函数
cURL
8
在 Dodo Payments 中添加 webhook
将端点 URL 设置为:选择支付和订阅事件。
9
创建产品和功能
在 Dodo 仪表板 → 产品 → 创建产品。可选地添加元数据:定价 UI 读取此
features 数组并动态呈现。10
运行开发服务器
包含内容
- 通过 Supabase 进行身份验证(已配置 Google OAuth)
- 通过 Dodo Payments 进行订阅结账
- 用于 Webhook 的 Supabase Edge 函数(
dodo-webhook) - Drizzle ORM 架构和迁移
- 带有发票、订阅状态和计划功能的仪表板
关键文件和路径
- 边缘函数
- Next.js 路由
- 数据库(Drizzle)
环境变量
Supabase
Supabase
Dodo Payments
Dodo Payments
Google OAuth
Google OAuth
验证和故障排除
Webhook 签名无效 (401)
Webhook 签名无效 (401)
- 确保
DODO_WEBHOOK_SECRET与 Dodo 仪表板中的值匹配 - 确认您已部署最新的
dodo-webhook函数 - 验证您的函数中的头名称是否正确(Dodo-Signature)
数据库推送失败
数据库推送失败
- 检查
DATABASE_URL语法和 Supabase 网络出站 - 在项目创建后等待 ~2–3 分钟再进行第一次推送
OAuth 重定向不匹配
OAuth 重定向不匹配
- 重定向 URI 必须是
https://[ref].supabase.co/auth/v1/callback - 确保 Google Cloud 和 Supabase Auth 提供程序中的设置相同
您现在拥有一个使用 Supabase 和 Dodo Payments 构建的工作订阅 SaaS。
原始仓库和详细步骤:dodo-supabase-subscription-starter。