Supabase 是一个提供数据库、身份认证、存储与实时能力的平台。本技能面向使用 Supabase 的开发者,整理其常用功能与操作方式。当用户提到 "supabase"、"supabase auth"、"supabase storage"、"supabase realtime" 等关键词时可参考本技能。
【初始化与安装】 命令行工具安装:npm install -g supabase,或 brew install supabase/tap/supabase。初始化本地项目:supabase init。关联远程项目:supabase link --project-ref <id>。客户端安装:npm install @supabase/supabase-js(JS/TS),或 pip install supabase(Python)。
客户端初始化示例(JS/TS): import { createClient } from '@supabase/supabase-js' const supabase = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_ANON_KEY!) 服务端高权限客户端(绕过 RLS,不可暴露给客户端): const supabaseAdmin = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_SERVICE_ROLE_KEY!) 还支持结合生成的类型使用:createClient<Database>(url, key)。
【数据库】 可通过 SQL 创建表,例如 public.posts 表,包含 id、title、content、user_id(外键引用 auth.users)、created_at 等字段。
【迁移与类型生成】 常用命令:supabase migration new create_posts_table 创建迁移文件;supabase db push 应用迁移到远程;supabase db pull 拉取远程 schema;supabase db reset 重置本地数据库并重跑迁移;supabase gen types typescript --linked > src/types/database.ts 生成类型。迁移文件位于 supabase/migrations/ 目录,文件名带时间戳。
【行级安全(RLS)】 对暴露给客户端的表应始终启用 RLS。关键函数:auth.uid() 返回当前用户 ID,auth.jwt() 返回完整 JWT claims。using 控制可查询的现有行,with check 控制允许新增或修改的行。技能中给出了 select、insert、update、delete 的 RLS 策略示例。
【身份认证】 支持邮箱密码注册与登录(signUp、signInWithPassword)、OAuth(github、google、apple、discord 等,signInWithOAuth)、魔法链接(signInWithOtp)、手机 OTP(signInWithOtp 与 verifyOtp)。辅助方法包括 getUser、getSession、signOut,以及通过 onAuthStateChange 监听认证状态变化并可 unsubscribe。
【存储】 可创建存储桶(可设置 public、fileSizeLimit、allowedMimeTypes),支持上传(可设置 cacheControl、upsert)、下载、生成签名 URL(私有桶临时访问)以及获取公开 URL(仅公开桶)。存储策略基于 storage.objects 表,示例中给出了插入与读取策略。
【实时】 为表启用实时:alter publication supabase_realtime add table public.posts。支持 Postgres Changes 订阅(可按事件类型过滤)、Presence(同步、加入、离开,可 track 状态)以及 Broadcast(发送与接收消息)。可通过 removeChannel 取消订阅。
【Edge Functions】 基于 Deno 的服务端 TypeScript 函数。命令:supabase functions new、serve、deploy,secrets set 与 secrets list 管理密钥。技能给出了函数编写示例(含 CORS 处理、创建客户端、返回 JSON)以及从客户端通过 functions.invoke 调用。
【客户端库查询】 Supabase 根据 schema 自动生成 PostgREST API,客户端库对其进行封装。支持 select(含字段选择、关联查询、count)、insert(单条或批量)、update、delete,以及多种过滤(eq、neq、gt、lt、like、ilike、in、is)、order、range、limit、single。
【数据库函数与 RPC】 可创建 SQL 函数并通过 supabase.rpc 调用。security definer 会绕过 RLS,security invoker(默认)遵循调用方的 RLS 策略。
【CLI 参考与本地开发】 supabase start 启动本地完整栈(Postgres、Auth、Storage、Studio),stop 停止,status 查看本地 URL 与密钥;db push/pull/reset/lint/diff 管理数据库;migration new/list 管理迁移;gen types 生成类型;functions new/serve/deploy 管理函数;secrets set/list 管理密钥。Studio 运行在 http://localhost:54323,本地环境变量示例:SUPABASE_URL=http://localhost:54321 与对应的 anon key。
【常见模式】 1)用户资料自动创建触发器:创建 profiles 表并启用 RLS,通过 handle_new_user 函数与 on_auth_user_created 触发器在新增用户时自动插入资料。 2)带认证的文件上传:按用户 ID 组织路径,上传后获取公开 URL 并更新到资料表。 3)实时聊天:发送消息时校验登录状态并插入 messages 表,订阅消息时按 channel_id 过滤 INSERT 事件。
【限制】 关于具体收费、价格、平台范围与性能效果,资料暂未提供,请以官方文档为准。