如何使用Supabase Admin API调用inviteUserByEmail及信任服务器说明
解答Supabase Admin API 受信任服务器调用问题
什么是“受信任服务器”
这里的“服务器”指你完全可控的后端环境,绝对不能在前端(浏览器、移动端APP)直接调用Admin API——因为这类接口需要用到服务端密钥,前端暴露密钥会导致严重安全风险。Supabase不直接托管调用逻辑,但提供了几种便捷的受信任环境选项:
- Supabase Edge Functions:Supabase官方提供的无服务器函数环境,属于你的受信任服务器,完全在Supabase生态内运行
- 你自己搭建的后端服务器(Node.js、Python等任意后端语言均可)
- 其他云服务商的无服务器函数(如Vercel Functions、AWS Lambda)
用Supabase Edge Functions实现邮箱邀请(最便捷的原生方案)
这是最贴合你需求的方案,无需额外搭建服务器,步骤如下:
初始化Edge Functions
在本地项目目录执行命令:supabase functions new invite-user编写函数代码
打开生成的supabase/functions/invite-user/index.ts,替换为以下代码:import { createClient } from '@supabase/supabase-js' export default async function handler(req: Request) { // 从请求体获取目标邮箱 const { email } = await req.json() // 初始化服务端Supabase客户端,使用服务端密钥 const supabaseAdmin = createClient( Deno.env.get('SUPABASE_URL')!, Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')! ) try { // 调用Admin API发送邀请邮件 const { data, error } = await supabaseAdmin.auth.admin.inviteUserByEmail(email) if (error) throw error return new Response(JSON.stringify({ message: '邀请邮件已发送', data }), { status: 200, headers: { 'Content-Type': 'application/json' } }) } catch (error) { return new Response(JSON.stringify({ error: (error as Error).message }), { status: 400, headers: { 'Content-Type': 'application/json' } }) } }部署函数
执行部署命令:supabase functions deploy invite-user前端调用该函数
前端通过Supabase客户端调用部署好的函数,无需暴露服务端密钥:// 前端代码(浏览器/APP) const { data, error } = await supabase.functions.invoke('invite-user', { body: { email: 'invitee@example.com' } }) if (error) { console.error('邀请失败:', error) } else { console.log('邀请成功:', data) }
关键注意事项
- 服务端密钥保护:
SUPABASE_SERVICE_ROLE_KEY是最高权限密钥,只能在受信任服务器环境(如Edge Functions、你的后端)中使用,绝对不能出现在前端代码里 - 权限校验:可以在Edge Functions中添加额外逻辑,比如只有管理员用户才能调用邀请接口,避免任意用户发起邀请
- 邮件自定义:可在Supabase控制台「Authentication」→「Templates」中修改邀请邮件的内容样式
内容的提问来源于stack exchange,提问作者Adam Jones
相关产品推荐
相关产品推荐

