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

如何将Clerk用户同步至Supabase数据库?Webhook配置及数据处理疑问

解决Clerk用户创建时同步到Supabase的问题

一、确定Webhook端点URL

你需要一个能接收Clerk POST请求的后端端点,两种常用方案:

  • 用Supabase Edge Functions:创建并部署一个Edge Function后,会得到类似 https://<你的项目ID>.functions.supabase.co/<函数名> 的URL,这就是要填的端点地址。
  • 用自有后端服务:如果有自己的Node.js/Go等后端,写一个POST接口(比如 /api/clerk-webhook),用你的域名加路径作为端点,比如 https://your-domain.com/api/clerk-webhook。

二、配置Clerk Webhook

  1. 登录Clerk后台,进入Webhooks设置页
  2. 添加新Webhook,填入上面拿到的端点URL
  3. 仅勾选 user.created 事件(只需要这个事件触发同步)
  4. 复制Clerk提供的Webhook签名密钥,后续验证请求要用

三、处理Webhook请求并写入Supabase

以Supabase Edge Functions为例,步骤如下:

1. 创建Edge Function

用Supabase CLI执行:

supabase functions new sync-clerk-user

2. 编写函数代码(TypeScript)

import { serve } from "https://deno.land/std@0.168.0/http/server.ts";
import { createClient } from "https://esm.sh/@supabase/supabase-js@2";
import { verifyWebhookSignature } from "https://esm.sh/@clerk/clerk-sdk-node@4";

const CLERK_WEBHOOK_SECRET = Deno.env.get("CLERK_WEBHOOK_SECRET")!;
const SUPABASE_URL = Deno.env.get("SUPABASE_URL")!;
const SUPABASE_SERVICE_ROLE_KEY = Deno.env.get("SUPABASE_SERVICE_ROLE_KEY")!;

const supabase = createClient(SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY, {
  auth: {
    autoRefreshToken: false,
    persistSession: false,
  },
});

serve(async (req) => {
  try {
    // 验证Clerk请求合法性
    const payload = await req.text();
    const signature = req.headers.get("svix-signature")!;
    verifyWebhookSignature(payload, signature, CLERK_WEBHOOK_SECRET);

    // 解析用户数据
    const { data } = JSON.parse(payload);
    const clerkUser = data;

    // 写入Supabase用户表(假设表名为users)
    const { error } = await supabase.from("users").insert({
      id: clerkUser.id,
      email: clerkUser.email_addresses[0]?.email_address,
      name: clerkUser.full_name,
      avatar_url: clerkUser.image_url,
      created_at: clerkUser.created_at,
    });

    if (error) throw error;

    return new Response(JSON.stringify({ status: "success" }), { status: 200 });
  } catch (err) {
    console.error(err);
    return new Response(JSON.stringify({ error: err.message }), { status: 400 });
  }
});

3. 设置环境变量

在Supabase项目的Edge Functions设置中添加三个变量:

  • CLERK_WEBHOOK_SECRET:从Clerk后台复制的签名密钥
  • SUPABASE_URL:你的Supabase项目URL
  • SUPABASE_SERVICE_ROLE_KEY:Supabase的服务角色密钥(在API设置页获取)

4. 部署函数

supabase functions deploy sync-clerk-user

四、测试验证

  1. 在Clerk后台创建测试用户
  2. 查看Supabase的users表,确认数据已同步
  3. 若失败,检查Edge Function日志(Supabase后台Functions页面可查看)

内容的提问来源于stack exchange,提问作者Israel Hernandez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:10:11