You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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实现邮箱邀请(最便捷的原生方案)

这是最贴合你需求的方案,无需额外搭建服务器,步骤如下:

  1. 初始化Edge Functions
    在本地项目目录执行命令:

    supabase functions new invite-user
    
  2. 编写函数代码
    打开生成的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' }
        })
      }
    }
    
  3. 部署函数
    执行部署命令:

    supabase functions deploy invite-user
    
  4. 前端调用该函数
    前端通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 18:45:34